1. 程式人生 > >順序隊列

順序隊列

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 */

順序隊列