1. 程式人生 > 其它 >Queue佇列的基本功能陣列實現

Queue佇列的基本功能陣列實現

類似地,鑑於STL的佇列有或多或少的功能缺失,於是我們就來手寫一個佇列。

以下是程式碼,功能有待完善。

 1 //陣列實現佇列的簡單操作
 2 int q[100001];
 3 int front = 1,rear = 0;
 4 
 5 void Push(int x){
 6     q[++rear] = x;
 7 }
 8 
 9 void Pop(){
10     ++front;
11 }
12 
13 int Query(int k){            //詢問第k個元素
14     //如何判斷佇列裡有幾個元素? rear - front + 1即可
15     return q[front+k-1
]; 16 } 17 int Top(){ 18 return q[front]; 19 }

不僅如此,我們經常還會用到迴圈佇列,這邊一併給出:

 1 //陣列實現迴圈佇列
 2 //有些時候 入隊出隊次數遠遠大於隊伍的元素個數,那麼開很大的陣列就浪費空間了
 3 //於是我們就讓 當隊尾指標移動到陣列末端時,再將其移動到陣列頭即可,反之亦然
 4 const int size = 1001;            //size要嚴格大於佇列最長的時候的長度
 5 int q[size+1];
 6 int front = 1,rear = size;
 7 
 8 void Push(int x){
9 rear = rear % size + 1; 10 q[rear] = x; 11 return; 12 } 13 14 void Pop(){ 15 front = front % size + 1; 16 return; 17 } 18 19 bool Empty(){ 20 return rear % size + 1 == front; 21 } 22 23 int Query(int x){ 24 if (front + x - 1 <= size){ 25 return q[front + x - 1
]; 26 } 27 else{ 28 return q[front + x - 1 - size]; 29 } 30 }

STL的常用方法也給出(STL佇列真真不常用)

 1 //先進先出FIFO
 2 //只允許在後端rear插入,在前端front刪除
 3 //queue普通佇列 o(1)
 4 queue<int> que;
 5 que.push(1); //入隊
 6 que.pop();   //出隊
 7 que.empty();
 8 que.size();
 9 que.front(); //返回隊頭元素
10 que.back();  //返回隊尾元素
11 //佇列沒辦法像list一樣用迭代器遍歷,只能出隊實現

 詳情可以參考:<queue> - C++ Reference (cplusplus.com)