一.队列介绍
队列这种数据结构其实就是来源于我们的生活中,食堂买饭,超市结账......我们都是先来先买/先来先结算,后来的就乖乖在队尾等着。
如图所示:1号结完账就先走,这时12号来了就排在末尾。
这种先进先出(First In First Out)的线性序列就被称为队列。队列也是一种线性表,只不过它是操作受限的线性表,只能在两端操作:一端进,一端出。进的一段称为队尾,出的一端称为队头。队列可以用顺序存储,也可以用链式存储。
二.模拟实现队列
对于C语言的朋友,我们可以使用数组来实现队列,在竞赛中也常使用这种方法。
下面我将一步一步带大家实现—》
首先我们需要先定义一个数组来存储数据,以及两个变量来存储队头/队尾在数组中的位置。
int queue[max];
int head = 0;//队首指针
int tail = 0;//队尾指针
1.入队
void queue_push(int x)
{
if (tail >= max)//需要判断当前数组是否满了
{
printf("overflow");
}
else
{
queue[tail] = x;//在队尾添加上数据
tail++;
}
}
2.出队
void queue_pop()
{
if (head==tail)//弹出队首元素,需要判断队列元素是否为空
{
printf("empty");
}
else
{
head++;//实际我们没有删除该元素,但是我们将队首位置改变也起到了相同效果。
}
}
3.查询
//查询队首元素(也可以查询队尾元素)
int queue_front()
{
if (head == tail)
{
printf("empty");
return -1;
}
else
{
return queue[head/tail];
}
}//查询元素个数:tail-head+1
三.C++STL提供的queue容器
C++已经提供了queue容器及其接口,我们只需包含一下头文件就可用啦! 我把常用的代码直接附在下面。
#include <iostream>
using namespace std;
#include <queue>int main()
{
//默认构造方式构造一个队列容器
queue<int> q1;//创建一个队列 格式:queue<数据类型>随便取个名字//入队
q1.push(1);
q1.push(2);
q1.push(3);
//访问队首/队尾
cout << q1.front() << endl;cout << q1.back() << endl;
//删除队首
q1.pop();
//遍历队列里所有元素
while (q1.empty() != true)
{
cout << q1.front() << endl;
q1.pop();
}//赋值
q1.front() = 100;
//查询元素总数
cout << "size:" << q1.size() << endl;
return 0;
}
OK!本篇文章就结束啦。有问题欢迎评论区留言,你的点赞关注收藏就是对俺的最大鼓励,谢谢啦。