迴圈佇列的基礎操作(C++)
阿新 • • 發佈:2019-01-05
#include "iostream" #include"LinkQueue.h" using namespace std; //===================佇列(先進先出)============= /*只允許在隊尾進行插入操作,而在隊頭進行刪除操作的線性表*/ //==============迴圈佇列(頭尾相接)=========== /*佇列:陣列+兩個指標*/ const int MAXSIZE = 20; struct SqQueue { int val[MAXSIZE]; int front;//頭指標 int reat;//尾指標,若佇列不空,指向佇列尾元素的下一個位置 struct SqQueue(int x) :front(x), reat(x){}; }; //判斷佇列長度 int QueueLength(const SqQueue *Q) { return (Q->reat - Q->front + MAXSIZE) % MAXSIZE; } //佇列的遍歷 bool VisitQueue(const SqQueue *Q) { if ((Q->reat + 1) % MAXSIZE == Q->front) return false; int i = Q->front; while (i != Q->reat) { cout << Q->val[i] << " "; i = (i + 1) % MAXSIZE; } cout << endl; return true; } //佇列的插入 bool QueueInsert(SqQueue *Q, int data) { if ((Q->reat + 1) % MAXSIZE == Q->front)/* 佇列滿的判斷 */ { cout << "滿隊!" << endl; return false; } else { Q->val[Q->reat] = data; /* 將data賦值給隊尾 */ Q->reat = (Q->reat + 1) % MAXSIZE;/* rear指標向後移一位置,若到最後則轉到陣列頭部 */ return true; } } //佇列的刪除 bool QueueDelete(SqQueue *Q) { if ((Q->reat + 1) % MAXSIZE == Q->front)/* 佇列空的判斷 */ { cout << "空隊" << endl; return false; } else { Q->front = (Q->front + 1) % MAXSIZE;/* front指標向後移一位置, 若到最後則轉到陣列頭部 */ return true; } } //佇列清空 bool ClearQueue(SqQueue *Q) { Q->front = Q->reat = 0; return true; } //判斷佇列是否為空 bool QueueEmpty(SqQueue *Q) { if ((Q->reat + 1) % MAXSIZE == Q->front) return true; else return false; } int main() { =========迴圈佇列============= SqQueue *Q = new SqQueue(0); int n; while (cin >> n) QueueInsert(Q, n); //QueueDelete(Q); VisitQueue(Q); system("pause");// 或者 getchar(); return 0; }