c语言---队列(queue)

https://blog.csdn.net/zhang21722668/article/details/82155301

队列的概念:先进先出(FIFO)特性的特殊线性表

队头(出队列):进行删除操作
对位(入队列):插入操作

3种队列形式

1、顺序队列

2种出队列操作

(1)队头不动,出队列时队头后的所有元素向前移动
缺陷:操作是如果出队列比较多,要搬移大量元素。
在这里插入图片描述
(2)队头移动,出队列时队头向后移动一个位置
如果还有新元素进行入队列容易造成假溢出。
假溢出:顺序队列因多次入队列和出队列操作后出现的尚有存储空间但不能进行入队列操作的溢出。
真溢出:顺序队列的最大存储空间已经存满而又要求进行入队列操作所引起的溢出。
在这里插入图片描述

2、循环队列

在这里插入图片描述
循环队列如何进行判空和满操作:

少用一个存储单元
设置一个标记flag;
初始值 flag = 0;入队列:flag = 1; 出队列:flag = 0;
队列为空时:(front == rear && flag == 0)
队列为满时:(front == rear && flag == 1)
设置一个计数器

3、链式队列(头删尾插的单链表)

双端队列deque double ended queue 通常读为“deck”

所谓双端队列是指两端都可以进行进队和出队操作的队列,如下图所示,将队列的两端分别称为前端和后端,两端都可以入队和出队。其元素的逻辑结构仍是线性结构
在这里插入图片描述
在双端队列进队时:前端进的元素排列在队列中后端进的元素的前面,后端进的元素排列在队列中前端进的元素的后面。在双端队列出队时,无论前端出还是后端出,先出的元素排列在后出的元素的前面。

输出受限的双端队列,即一个端点允许插入和删除,另一个端点只允许插入的双端队列。
在这里插入图片描述
输入受限的双端队列,即一个端点允许插入和删除,另一个端点只允许删除的双端队列。
在这里插入图片描述
双端队列既可以用来队列操作,也可以用来实现栈操作(只操作一端就是栈了)

猜你喜欢

转载自blog.csdn.net/qq_42024067/article/details/107511165