代碼主要來源:【數據結構】【清華大學】【嚴蔚敏】數據結構
循環隊列基本運算以下:
(1)初始化隊列Q
(2)依次進隊列元素a,b,c
(3)隊列爲非空
(4)出隊一個元素a
(5)依次進隊列元素d,e,f
(6)出隊列序列:b c d e f
(7)釋放隊列spa
完整代碼以下:指針
#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define TRUE 1 #define FALSE 0 #define MAXQSIZE 10 // 最大隊列長度(對於循環隊列,最大隊列長度要減1),由於要考慮棧滿判斷條件 typedef char QElemType; typedef int Status; typedef struct SqQueue { QElemType *base; // 初始化的動態分配存儲空間 int front; // 頭指針,若隊列不空,指向隊列頭元素 int rear; // 尾指針,若隊列不空,指向隊列尾元素的下一個位置 } SqQueue; Status InitQueue(SqQueue &Q) { // 構造一個空隊列Q Q.base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType)); if(!Q.base) // 存儲分配失敗 exit(OVERFLOW); Q.front=Q.rear=0; return OK; } Status DestroyQueue(SqQueue &Q) { // 銷燬隊列Q,Q再也不存在 if(Q.base) free(Q.base); Q.base=NULL; Q.front=Q.rear=0; return OK; } Status QueueEmpty(SqQueue Q) { if(Q.front==Q.rear) return TRUE; else return FALSE; } int QueueLength(SqQueue Q) { // 返回Q的元素個數,即隊列的長度 return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; } Status EnQueue(SqQueue &Q,QElemType e) { // 插入元素e爲Q的新的隊尾元素 if((Q.rear+1)%MAXQSIZE==Q.front) // 隊列滿 return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQSIZE; return OK; } Status DeQueue(SqQueue &Q,QElemType &e) { // 若隊列不空,則刪除Q的隊頭元素,用e返回其值,並返回OK;不然返回ERROR if(Q.front==Q.rear) // 隊列空 return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXQSIZE; return OK; } int main() { SqQueue Q; InitQueue(Q); char q1[3]={'a','b','c'}; char q2[3]={'d','e','f'}; int i; char e; printf("依次進隊列元素a,b,c\n"); for(i=0;i<3;i++) { EnQueue(Q,q1[i]); } if(!QueueEmpty(Q)) { printf("此時棧非空\n"); } DeQueue(Q,e); printf("出隊一個元素:%c\n",e); printf("依次進隊列元素d,e,f\n"); for(i=0;i<3;i++) { EnQueue(Q,q2[i]); } printf("出隊序列爲:"); while(!QueueEmpty(Q)) { DeQueue(Q,e); printf("%c ",e); } if(DestroyQueue(Q)) { printf("\n釋放隊列成功!"); } }