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)

posted @ 2022-03-29 20:26  Conqueror712  阅读(73)  评论(0)    收藏  举报