循環隊列的基本操作
阿新 • • 發佈:2018-10-21
init sel ret maxsize span spa return thead nbsp
1 //循環隊列基本操作 2 #define MAXSIZE 100 3 Typedef struct{ 4 QElemType *base; 5 int front; 6 int rear; 7 }SqQueue; 8 9 //隊列的初始化 10 Status InitQueue(SqQueue &Q){ 11 Q.base=(QElemType *)malloc(MAXSIZE*sizeof(QElemType)); 12 if(!Q.base) exit(OVERFLOW); 13 Q.front=Q.rear; 14 returnOK; 15 } 16 //求隊列的長度 17 int QueueLength(SqQueue Q){ 18 return (Q.rear-Q.front+MAXSIZE)%MAXSIZE; 19 } 20 //循環隊列入隊 21 Status EnQueue(SqQueue &Q,QElemType e){ 22 if((Q.rear+1)%MAXSIZE==Q.front) return ERROR; //隊滿 23 Q.base[Q.rear]=e; //新元素入隊尾 24 Q.rear=(Q.rear+1)%MAXSIZE; //隊尾指針+1 25 return OK; 26 } 27 //循環隊列出隊 28 Status DeQueue(SqQueue &Q,QElemType &e){ 29 if(Q.front==Q.rear) return ERROR; //隊空 30 e=Q.base[Q.front]; //保存隊頭元素 31 Q.front=(Q.front+1)%MAXSIZE; //隊頭指針+1 32 return OK; 33 } 34 //取隊頭元素 35 SElemType GetHead(SqQueue Q){ 36 if(Q.front!=Q.rear) //隊列不為空 37 return Q.base[Q.front]; //返回隊頭指針元素的值,隊頭指針不變 38 }
循環隊列的基本操作