【数据结构】顺序队列模拟实现

这篇具有很好参考价值的文章主要介绍了【数据结构】顺序队列模拟实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【数据结构】顺序队列模拟实现,数据结构与算法,数据结构

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

一、队列的定义:

一、队列的基本概念

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出 (First In FirstOut)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头

【数据结构】顺序队列模拟实现,数据结构与算法,数据结构

二、链式结构队列的模拟实现

1.结构图;

使用单向链表
【数据结构】顺序队列模拟实现,数据结构与算法,数据结构
初始状态:(队空条件):Q->front == Q->rear == 0。
进队操作:队不满时,先送值到队尾元素,再将队尾指针加1。
出队操作:队不空时,先取队头元素值,再将队头指针加1。

2.队列的结构体

在这里我使用的是单链表的形式来模拟队列。

//定义data数据类型
typedef int QueueDataType;

//定义节点
typedef struct QueueNode
{
	struct QueueNode* next;
	QueueDataType data;
}QNode;

//定义队列
typedef struct QueueList
{
	//头指针
	QNode* head;
	//尾指针
	QNode* tail;
	//链表长度
	int size;
}QList;

3.初始化

【数据结构】顺序队列模拟实现,数据结构与算法,数据结构

这里没有设置头节点,初始化时,两个指针都指向空。

//初始化
void QueueInit(QList* p)
{
	assert(p);
	p->head = p->tail = NULL;
	p->size = 0;
}

4.销毁队列

需要注意 由于动态分配的内存空间 ,在使用完队列之后,要把申请的空间及时的释放掉。具体做法就是遍历单链表,释放每一个节点。的遍历每一个节点,并对节点进行释放

//销毁队列
void QueueDestroy(QList* p)
{
	assert(p);
	QNode* cur = p->head;
	while (cur)
	{
		QNode* next = cur->next;
		free(cur);
		cur = cur->next; 
	}
	p->head = p->tail = NULL;
	p->size = 0; 
}

5.入队(尾插)

【数据结构】顺序队列模拟实现,数据结构与算法,数据结构

注意为空时的插入,与存在节点时,分情况讨论

//入队(尾插)
void QueuePush(QList* p, QueueDataType x)
{
	assert(p);
	QNode* newnode = (QNode*)malloc(sizeof(QNode));
	if (newnode == NULL)
	{
		perror("malloc fail\n");
		exit(-1);
	}
	newnode->data = x;
	newnode->next = NULL;
	if (p->head == NULL)
	{
		p->head = p->tail = newnode;
	}
	else
	{
		p->tail->next = newnode;
		p->tail = p->tail->next;
	}
	p->size++;
}

6.出队(头删)

【数据结构】顺序队列模拟实现,数据结构与算法,数据结构文章来源地址https://www.toymoban.com/news/detail-692195.html

//出队(头删)
void QueuePop(QList* p)
{
	assert(p);
	assert(!IsEmpty(p));

	//当只有一个节点时 
	if (p->head->next == NULL)
	{
		free(p->head);
		p->head = p->tail = NULL;
	}
	//当有两个或两个以上节点
	else
	{
		QNode* phead = p->head->next;
		free(p->head);
		p->head->next = phead;
	}
	p->size--;
}

7.获取队头

//获取队头
QueueDataType QueueHead(QList* p)
{
	assert(p);
	assert(!IsEmpty(p));
	return p->head->data;
}

8.获取队尾

//获取队尾
QueueDataType QueueTail(QList* p)
{
	assert(p);
	assert(!IsEmpty(p));
	return p->tail->data;
}

9.判断是否为空

//判断是否为空
bool IsEmpty(QList* p)
{
	assert(p);
	return p->head == NULL;
}

10.获取队列长度

//获取队列长度
int QueueSize(QList* p)
{
	return p->size;
}

到了这里,关于【数据结构】顺序队列模拟实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 青岛大学_王卓老师【数据结构与算法】Week05_14_队列的顺序表示和实现2_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周14–3.5队列的表示和实现3–

    2024年02月16日
    浏览(44)
  • 青岛大学_王卓老师【数据结构与算法】Week05_13_队列的顺序表示和实现1_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周13–3.5队列的表示和实现2–

    2024年02月17日
    浏览(32)
  • 数据结构队列例题一顺序实现

    仅供个人复习使用

    2024年02月06日
    浏览(35)
  • 数据结构 模拟实现ArrayList顺序表

    目录 一、顺序表中的接口 二、顺序表中的方法实现 (1)display方法 (2)add方法 1、不指定下标位置插入 2、指定下标位置插入 (3)contains方法 (4)indexOf方法 (5)get方法 (6)set方法 (7)remove方法 (8)size方法 (9)clear方法 三、最终代码 代码如下: 以上的方法就是我们

    2024年02月04日
    浏览(36)
  • 数据结构:顺序表 模拟实现及详解

    目录 一、线性表 二、顺序表 2.1顺序表的概念及结构 2.1.1静态顺序表 2.2.2动态顺序表 2.2动态顺序表接口实现   线性表( linear list )是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串

    2024年01月22日
    浏览(29)
  • 【数据结构】详谈队列的顺序存储及C语言实现

    大家好,很高兴又和大家见面啦!!! 在上一篇内容中,我们在介绍完队列的基本概念、重要术语以及基本操作后,又回顾了一下数据结构的三要素——数据的逻辑结构、数据的存储结构以及数据的运算。 队列这种数据结构我们已经介绍了它的逻辑结构以及数据运算的定义

    2024年01月21日
    浏览(63)
  • 【数据结构】 队列(Queue)与队列的模拟实现

    队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有==先进先出FIFO(FirstIn First Out) ==入队列: 进行插入操作的一端称为 队尾(Tail/Rear) 出队列: 进行删除操作的一端称为 队头(Head/Front) 在Java中, Queue是个接口,底层是通过链表实现

    2024年02月11日
    浏览(36)
  • 【C语言数据结构】模拟·顺序表·总项目实现

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 我在上一篇博客中,

    2024年02月15日
    浏览(31)
  • 【数据结构】栈和队列的模拟实现

    前言:前面我们学习了单链表并且模拟了它的实现,今天我们来进一步学习,来学习栈和队列吧!一起加油各位,后面的路只会越来越难走需要我们一步一个脚印! 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关

    2024年02月05日
    浏览(33)
  • 【数据结构】队列的使用|模拟实现|循环队列|双端队列|面试题

    1.1 概念 队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾(Tail/Rear) 出队列:进行删除操作的一端称为 队头(Head/Front) 队列和栈的区别: 队列是 先进先出(队

    2024年02月03日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包