循环队列的类型定义
#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(CirQueuq *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 if empty."); return Q->data[Q->front]; } ```````````````````````````````````````````````````````````````````````````````````` 队列的操作特点是“先进先出”。前者主要是头指针、尾指针的使用,后者主要是理解循环队列提出的原因及其特点。两者都要掌握队列空与满的判定条件以及出队列、入队列操作的实现。