~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

循环队列并不复杂,把几个位置规定清楚是关键!比如,front和rear各指向哪?还有一些小细节,首先观察图:

从书上来看,尾端rear必定为空(特意留下一个空位置),front总是指向队头,而rear指向尾。
接着是几个重要的公式

判定队列满的公式

队列长度的计算公式

下面以入队列说明,首先判定队列是否满?第二步,在rear位置处插入数据,最后计算rear的下标,出列与之相似。

#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define QueueSize 100
typedef struct
{
    int data[QueueSize];
    int front,rear;
}*SeqQueue,Squeue;
void InitQueue(SeqQueue &Q)/*初始化*/
{
    Q->front=Q->rear=0;
}
int EnQueue(SeqQueue &Q,int e)/*入队*/
{
    if(Q->front==(Q->rear+1)%QueueSize)/*队列是否满?*/
        return ERROR;
    Q->data[Q->rear]=e;
    Q->rear=(Q->rear+1)%QueueSize;
    return OK;
}
int DeQueue(SeqQueue &Q,int &e)/*出队*/
{
    if(Q->front==Q->rear)/*队列是否空*/
    {
        cout<<"队列已空!"<<endl;
        return ERROR;
    }
    e=Q->data[Q->front];
    Q->front=(Q->front+1)%QueueSize;
    return OK;
}
int main()
{
    int e;
    SeqQueue q=(SeqQueue)malloc(sizeof(Squeue));/*堆创建*/
    InitQueue(q);/*初始化*/
    EnQueue(q,12);/*入队*/
    DeQueue(q,e);/*出队*/
    cout<<"e="<<e<<endl;
    cout<<"font="<<q->front<<endl;
    cout<<"rear="<<q->rear<<endl;
    DeQueue(q,e);/*出队*/
    free(q);
    return 0;
}
posted on 2016-03-04 03:01  LuoTian  阅读(245)  评论(0编辑  收藏  举报