首页 > 代码库 > 循环队列

循环队列

#include<stdio.h>#include<stdlib.h>typedef int  QEleType;typedef int Status;#define  OK  1#define  ERROR  0#define  OVERLOW  -2#define  TRUE  1#define  FALSE  0//#define  Qsize 100  如果写了就错了一定要注意//#define  size 100  //不能随便宏定义typedef struct{    QEleType *base;//QEleType为队列元素类型,base为表示循环队列空间的动态数组    int front,rear;//队列指针front 指示队列元素的位置,队尾指针rear指示下一次入队位置    int queuesize;//循环队列存储空间大小}CirQueue;//循环队列类型Status InitCirQueue(CirQueue &Q,int Qsize){//构造一个空间大小为Qsize的初始空队列Q Q.base=(QEleType *)malloc(Qsize*sizeof(QEleType)); if(!Q.base)return    OVERLOW; Q.queuesize=Qsize; Q.front=Q.rear=0;//置为空队列 return OK;}Status queueIsEmpty(CirQueue &Q){    if(Q.front==Q.rear) return TRUE;//队列为空    else return FALSE;//队列非空}void clearQueue(CirQueue &Q){    //将循环队列Q清空    Q.front=Q.rear=0;}Status insertQueue(CirQueue &Q,QEleType &e){ if((Q.rear+1)%Q.queuesize==Q.front)return     OVERLOW;//队满,空间溢出,入队失败 Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%Q.queuesize;//队尾指针后移一个位置 return OK;}Status deleteQueue(CirQueue &Q,QEleType &e){ if(Q.front==Q.rear)return ERROR;//队空,操作出错 e=Q.base[Q.front]; Q.front=(Q.front+1)%Q.queuesize;//队头指针后移一个位置 return OK;}Status getFront(CirQueue &Q,QEleType &e){    //取队列Q的队头元素值 if(Q.front==Q.rear)return ERROR;//队空,操作出错 e=Q.base[Q.front]; return OK;}int queueLength(CirQueue &Q){    return(Q.rear-Q.front+Q.queuesize)%Q.queuesize;//返回队长}int main(){CirQueue Q; int e; int size=100; InitCirQueue(Q,size); queueIsEmpty(Q); clearQueue(Q); insertQueue(Q,e); deleteQueue(Q,e); getFront(Q,e); queueLength(Q); return 0;}

 

循环队列