何为循环队列?队列就像站队一样,一个人站在一个人的后面,形成笔直的一列,就是队列 。
如果队伍不是笔直的一列,而是站成一个圆形(队首的人站在队尾的人的后面),就是循环队列 。
类型定义
#define QueueSize 100 //应根据具体情况定义该值
typedef char DataType; //DataType的类型依赖于具体的应用
typedef struct{
int front; //头指针,队非空时指向队头元素
int rear; //尾指针,队非空时指向队尾元素的下一位置
int count;//计数器,记录队中元素总数
DataType data[QueueSize];
}CirQueue;
基本运算
用第三种方法,循环队列的六种基本运算:
① 置队空
void InitQueue(CirQueue *Q)
{
Q-front=Q-rear=0;
Q-count=0; //计数器置0
}
② 判队空
int QueueEmpty(CirQueue *Q)
{
return Q-count==0; //队列无元素为空
}
③ 判队满
int QueueFull(CirQueue *Q)
{
return Q-count==QueueSize; //队中元素个数等于QueueSize时队满
}
④ 入队
【循环队列的队空条件为 循环队列】void EnQueue(CirQueue *Q,DataType x)
{
if(QueueFull(Q))
Error("Queue overflow"); //队满上溢
Q-count ++; //队列元素个数加1
Q-data[Q-rear]=x; //新元素插入队尾
Q-rear=(Q-rear+1)%QueueSize; //循环意义下将尾指针加1
}
⑤ 出队
DataType DeQueue(CirQueue *Q)
{
DataType temp;
if(QueueEmpty(Q))
Error("Queue underflow"); //队空下溢
temp=Q-data[Q-front];
Q-count--; //队列元素个数减1
Q-front=(Q-front+1)%QueueSize; //循环意义下的头指针加1
return temp;
}
⑥取队头元素
DataType QueueFront(CirQueue *Q)
{
if(QueueEmpty(Q))
Error("Queue is empty.");
return Q-data[Q-front];
}
什么是循环队列为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量 。存储在其中的队列称为循环队列(Circular Queue) 。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列 。
二级c语言,队列、循环队列是什么?队列是一种特殊的线性表,循环队列是将向量空间想象为一个首尾相接的圆环 。
1、队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表 。
2、循环队列是将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量 。存储在其中的队列称为循环队列 。在顺序队列中,当队尾指针已经到数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫做“假溢出”,解决假溢出的途径----采用循环队列 。
扩展资料
判断队列满的情况:
1、count来计数;通常使用count
Count等于队列的MAXSIZE
2、Flag标志 int
入队列 flag=1 出队列flag=0
Front=rearflag==0
3、把一个存储单元空出来,不存放数据
Rear+1==front
注意事项:(不要) 顺序结构,SeqQueue myQueue;
参考资料来源:百度百科—循环队列
文章插图
循环队列通常用什么来实现队列的头尾相接?循环队列其实就是个数组,是靠队头、队尾、下标来实现头尾相接,如队列A有5个位置,当到达A【4】时,判断到达队尾了,下标变道队头0,即可回到A【0】——队列头部 。循环队列应该注意判断队列是否为空,是否满 。
将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用 。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾 。
扩展资料:
由n 个数据元素组成的有限序列,该序列有唯一的“第一个”和唯一的“最后一个”数据元素;除了 “第一个”和“最后一个”之外,队列中的每个数据元素都只有一个直接前驱和一个直接后继 。线性表的插入和删除操作可以在表中任意位置进行 。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表 。
秒懂生活扩展阅读
- 佛道双修的人开窍怎么感觉 佛道双修
- |哥伦布一来再来的小岛,买东西超级便宜!
- 枇杷几月成熟
- 为什么汽车刹车失灵
- 四书大学的核心思想是什么
- 杨振宁怎么样评价邓稼先的一生
- 求通项公式的11种方法
- 人生磨难的名言
- 祖国是什么?太阳回答是迎风招展的五星红旗 祖国是什么
- 现实中的武当山有多少个派系