1. 程式人生 > >順序佇列與迴圈佇列

順序佇列與迴圈佇列

#define  DataType   int   #define  MAXSIZE    100 using namespace std; typedef  struct  _CirQueue  { DataType   data[MAXSIZE]; int  front; //頭指標,隊非空時指向隊頭元素 int  rear; //尾指標,隊非空時指向隊尾元素的下一位置 }CirQueue, *pCirQueue; void   InitQueue(pCirQueue   pQueue); bool    Empty(pCirQueue  pQueue); bool InsertQueue(pCirQueue pQueue, DataType x); DataType OutQueue(pCirQueue pQueue); DataType    GetHead(pCirQueue  pQueue); int  GetLength(pCirQueue   pQueue); int _tmain(int argc, _TCHAR* argv[]) { int  len = 0, data; CirQueue  myQueue; InitQueue(&myQueue); if (!Empty(&myQueue)) { printf("Queue is Empty"); } InsertQueue(&myQueue, 1); InsertQueue(&myQueue, 2); InsertQueue(&myQueue, 3); InsertQueue(&myQueue, 4); len = GetLength(&myQueue); data = GetHead(&myQueue); while (Empty(&myQueue)) { data = OutQueue(&myQueue); cout<<endl<<data; } return 0; } //初始化:初始化一個新的佇列 void   InitQueue(pCirQueue   pQueue) { memset(pQueue, 0, sizeof(CirQueue)); } //佇列非空判斷:若佇列不為空,則返回true;否則返回false。 bool    Empty(pCirQueue  pQueue) { if (pQueue->front != pQueue->rear) { return true; } else return false; } //入佇列:在佇列的尾部插入元素x,使元素x成為新的隊尾。若 佇列滿,則返回false;否則,返回true。 bool InsertQueue(pCirQueue pQueue, DataType x) { if ((pQueue->rear+1)%MAXSIZE != pQueue->front)  //判斷佇列是否已滿 { pQueue->data[pQueue->rear] = x; pQueue->rear = (pQueue->rear + 1)%MAXSIZE; return true; } else return  false; } //出佇列:若佇列不為空,則返回對頭元素,並從對頭刪除該元素,對頭指標指向原對頭的後記元素;否則,返回元素NULL DataType OutQueue(pCirQueue pQueue) { DataType   data; if (pQueue->front == pQueue->rear) { return NULL; } else { data = pQueue->data[pQueue->front]; pQueue->front = (pQueue->front + 1)%MAXSIZE; return data; } } //取對頭元素:若佇列不空,則返回對頭元素;否則,返回空元素NULL DataType    GetHead(pCirQueue  pQueue) { if (pQueue->front == pQueue->rear) { return  NULL; } else { return  pQueue->data[pQueue->front]; } } //求佇列長度 int  GetLength(pCirQueue   pQueue) { int  length = 0, number = 0; for (number = pQueue->front; number%MAXSIZE < pQueue->rear; number = (number+1)%MAXSIZE) { length++; } return length; } 執行結果: