何为循环队列? 5

语言不要太复杂... 语言不要太复杂 展开
 我来答
cooke1234
2013-08-22 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3576万
展开全部

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

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

类型定义
#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
暗影之王01
推荐于2016-05-13 · TA获得超过5.6万个赞
知道大有可为答主
回答量:2万
采纳率:29%
帮助的人:4609万
展开全部
  1. 将向量空间想象为一个首尾相接的圆环,这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。

  2. 循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,队空和队满时头尾指针均相等,无法通过条件front,rear来判别队列是"空"还是"满"。

  3. 队列的操作特点是“先进先出”。前者主要是头指针、尾指针的使用,后者主要是理解循环队列提出的原因及其特点。两者都要掌握队列空与满的判定条件以及出队列、入队列操作的实现。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式