順序隊列
阿新 • • 發佈:2017-11-26
alloc ont style color col 存儲 結束 head print
///當不確定隊列的長度時,最好選擇鏈隊列 #include<bits/stdc++.h> #define OK 1; #define ERROR 0; #define MAXQSIZE 100 ///最大隊列長度 typedef int Status; typedef int ElemType; typedef struct { ElemType *base; ///動態分配存儲空間,分配出來的即數組空間 int front; int rear; ///註意:front 和 rear 只是指針,指向下標 }SqQueue; ///初始化Status Init(SqQueue &Q) { Q.base = (ElemType*)malloc(MAXQSIZE*sizeof(ElemType)); if(!Q.base) exit(1); Q.front=Q.rear=0; return OK; } ///判斷隊列是否為空 bool EmptyQueue(SqQueue Q) { if(Q.front==Q.rear) return true; else return false; } ///求隊列長度int QueueLength(SqQueue Q) { ///因為rear 可能比 front 小 int len = (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; return len; } ///取隊頭元素 int GetHead(SqQueue Q,ElemType &e) { if(Q.front==Q.rear) { printf("隊列為空,不存在隊頭元素!\n"); return ERROR; } e = Q.base[Q.front];return e; } ///入隊 Status Push(SqQueue &Q,ElemType e) { if((Q.rear+1)%MAXQSIZE==Q.front) ///隊滿 { return ERROR; } else { Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQSIZE; return OK; } } ///出隊 int Pop(SqQueue &Q) { if(Q.front==Q.rear) { printf("隊列為空,無元素可出隊!\n"); return ERROR; } else { ElemType e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXQSIZE; return e; } } ///遍歷隊內元素 void Print(SqQueue Q) { while(Q.front!=Q.rear) { ElemType e; printf("%d",GetHead(Q,e)); if(Q.front != Q.rear -1) printf("--"); Q.front=(Q.front+1)%MAXQSIZE; } printf("\n"); } int main() { int n; SqQueue Q; Init(Q); ElemType e; printf("請輸入入棧元素(以0為結束標誌):"); while(~scanf("%d",&n)) { if(n == 0) break; Push(Q,n); } if(EmptyQueue(Q)) printf("Yes , kong\n"); else printf("No kong!\n"); printf("隊列的長度:%d\n",QueueLength(Q)); printf("隊內元素:"); Print(Q); printf("------------------------------\n"); printf("隊列的隊首元素:%d\n",GetHead(Q,e)); printf("------------------------------\n"); printf("出隊的元素:%d\n",Pop(Q)); printf("------------------------------\n"); printf("隊列的隊首元素:%d\n",GetHead(Q,e)); printf("------------------------------\n"); printf("隊列的長度:%d\n",QueueLength(Q)); printf("隊內元素:"); Print(Q); printf("------------------------------\n"); return 0; } /* 1 2 3 4 5 0 */
順序隊列