永发信息网

何为循环队列?

答案:2  悬赏:50  手机版
解决时间 2021-03-17 12:06
  • 提问者网友:星軌
  • 2021-03-16 18:32
何为循环队列?
最佳答案
  • 五星知识达人网友:duile
  • 2021-03-16 19:35
    将向量空间想象为一个首尾相接的圆环,这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。
    循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,队空和队满时头尾指针均相等,无法通过条件front,rear来判别队列是"空"还是"满"。
    队列的操作特点是“先进先出”。前者主要是头指针、尾指针的使用,后者主要是理解循环队列提出的原因及其特点。两者都要掌握队列空与满的判定条件以及出队列、入队列操作的实现。
全部回答
  • 1楼网友:不甚了了
  • 2021-03-16 19:45

队列就像站队一样,一个人站在一个人的后面,形成笔直的一列,就是队列。

如果队伍不是笔直的一列,而是站成一个圆形(队首的人站在队尾的人的后面),就是循环队列。

类型定义
#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];
}追问我学的是Pascal
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯