@[TOC](队列详解)
# 队列特点
队列是一种常见的数据结构,特点是先进先出
举个例子:在排队做核酸时,这时就是一个队列,先到的先做,后来的后做
## 队列实现方法
队列一般用STL中的queue(单向队列)、deque(双向队列)、数组、链表(链表较为复杂,使用时容易出错,这里暂时不讲)
## 第一种:queue
queue使用时需调用⬇头文件
然后在适当的位置进行创建
格式:queue <数据类型(int、struct、char……)> 队列名称;
举个例子:
创建一个int类型的单向队列:
创建之后就该使用了
以下是本蒟蒻目前知道的:
q.push(value);//因为是单向队列,所以加入时只能在队尾加入
q.pop();//删除元素,注意括号里不填元素,直接将队首元素pop
q.empty();//判断队列是否为空,注意为空时返回true,有元素时返回false
q.size();//返回目前队列中元素的数量
q.back();//返回目前队列的队尾元素
欢迎各位大佬补充~
## deque
deque和queue差不多,只是deque队头和队尾都能加入元素和删除元素
禁止插队!!
需要的头文件:
# include <deque>
使用方法:
q.push_back(value);//从队尾插入元素
q.push_front(value);//从队首插入元素 插队行为(bushi
q.pop_back();//将队尾元素删除
q.pop_front();//将队首元素删除
q.clear();//清除队列元素
q.front();//返回队列顶部元素
q.back();//返回队列底部元素
q.empty();//和queue效果一样
q.emplace(place);//在指定位置插入元素 也是插队(bushi
## 数组实现
数组实现时,需要用到一个数组,一个head变量,一个tail变量
插入时,没有了push的操作
数组实现时插入元素方法:
int a[101],head=1,tail=1;
int t;
cin>>t;
a[tail]=t;
tail++;
删除元素时:
直接head++,将队首元素覆盖掉
1 | 2 | 3 | 4 | 5 |
head | head++ | tail |
++后1这个元素就被抹掉了
数组实现时empty的操作方法:
if (tail>head){
return false;//没有空队列
}else if (tail<=head){
return true;//队列为空
}
clear操作:
tail=head;
1 | 2 | 3 | 4 |
head(tail新位置) | tail |
总结:
使用队列时,建议使用queue和deque,数组这个方法也可以使用,但不建议
制作不易,点个赞吧~