實驗四:順序佇列(迴圈佇列)和鏈佇列
阿新 • • 發佈:2019-01-05
#ifndef CirQueue_H #define CirQueue_H const int QueueSize=100; //定義儲存佇列元素的陣列的最大長度 template //定義模板類CirQueue class CirQueue { public: CirQueue( ); //建構函式,置空隊 ~ CirQueue( ); //解構函式 void EnQueue(DataType x); //將元素x入隊 DataType DeQueue( ); //將隊頭元素出隊 DataType GetQueue( ); //取隊頭元素(並不刪除) int Empty( ); //判斷佇列是否為空 private: DataType data[QueueSize]; //存放佇列元素的陣列 int front, rear; //隊頭和隊尾指標,分別指向隊頭元素的前一個位置 和隊尾元素的位置 }; #endif #include "CirQueue.h" template CirQueue::CirQueue( ) { front=rear=QueueSize-1; } template CirQueue::~CirQueue( ) { } template void CirQueue::EnQueue(DataType x) { if ((rear+1) % QueueSize ==front) throw "上溢"; rear=(rear+1) % QueueSize; //隊尾指標在迴圈意義下加1 data[rear]=x; //在隊尾處插入元素 } template DataType CirQueue::DeQueue( ) { if (rear==front) throw "下溢"; front=(front+1) % QueueSize; //隊頭指標在迴圈意義下加1 return data[front]; //讀取並返回出隊前的隊頭元素,注意 隊頭指標 } template DataType CirQueue::GetQueue( ) { int i; if (rear==front) throw "下溢"; i=(front+1) % QueueSize; //注意不要給隊頭指標賦值 return data[i]; } template int CirQueue::Empty( ) { if (front==rear) return 1; else return 0; } #include using namespace std; #include "CirQueue.cpp" void main() { CirQueueQ; if (Q.Empty()) cout<<"佇列為空"<