Queue佇列的基本功能陣列實現
阿新 • • 發佈:2022-03-29
類似地,鑑於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一樣用迭代器遍歷,只能出隊實現