【普及】数据结构 - 队列(queue)

1. 定义

队列($queue$),一种运算操作受限的线性表。

限定在表的前端($head$)进行删除操作,而在表的后端($end$)进行插入操作。

  • 进行插入操作的端称为队尾,进行删除操作的端称为队头。

  • 队列中没有元素时,称为空队列。

2. 代码

$(1)$ 数组模拟

①定义
int a[N], head = 0, end = 0;	//定义一个整型队列,此时头指针与尾指针均指向0,代表队列为空
//head 为队首指针、end 为队尾指针
②入队列
void push(int x){
    a[end] = x;	//将x入队
    end ++;	//队尾指针后移一位
}
③出队列
void pop(){
    head ++;	//队首指针后移一位
}
④返回队首元素
int front(){
    return a[hend];	//返回队首元素
}
⑤返回队尾元素
int back(){
    return a[end - 1];	//返回队尾元素
}
⑥返回队中元素个数(队的长度)
int size(){
    return end - head;
    //队尾指针减队首指针即为队列的长度
}
⑦判断队列是否为空
bool empty(){
    if(head >= end)	return true;
    //队首指针大于或等于队尾指针,该队列为空,返回 真/1/true
    return false;
    //否则队首指针小于队尾指针,该队列不为空,返回 假/0/false
}
⑧遍历队
int a[N], head = 0, end = 0;
for(int i = 1; i <= n; i ++){	//入队
    int x;
    cin >> x;
    push(x);
}
while(!empty()){	//方案1.出队
    cout << front();
    pop();
}
while(size()){	//方案2.出队
    cout << front();
    pop();
}
⑨返回队中第 $i$ 个元素(数组模拟特有功能)
int queue_i(int i){
    return a[i - 1];
    //数组模拟队列的优势在于可以通过数组下标,在 O(1) 的时间里,找到第 i 个元素
    //此时,第 1 个元素存在 a[0] 中,所以第 i 个元素存在 a[i - 1]中
}

$(2)$ $STL$模板

①定义
#include<queue>	//引用 queue 头文件
queue<int> a;	//定义一个整型队列
queue<string> s;	//定义一个字符串队列
queue<node> b;	//定义一个结构体队列
②入队
a.push(x);
③出队
a.pop();
④返回队头元素
int x = a.front();
④返回队尾元素
int x = a.back();
⑤返回队中元素个数(队的长度)
int len = a.size();
⑥判断队是否为空
bool b = a.empty();
⑦遍历队
queue<int> a;
for (int i = 1; i <= n; i ++)	a.push(i);	//入队
while(!a.empty()){	//方案1.出队
	cout << a.front() << "\n";	//队首元素
	a.pop();
}
while(a.size()){	//方案2.出队
	cout << a.front() << "\n";	//队首元素
	a.pop();
}
```- [ ] 
posted @ 2025-01-29 18:31  步履不停的赤子  阅读(25)  评论(0)    收藏  举报