hi,我是小汉堡,欢迎阅读,今天给大家将一讲队列
队列讲解
队列是一种数据结构,他和数组很像,只不过队列只能对队首和队尾进行操作、读取。队列是一种先进先出的数据结构,假如我先读进了一个
100
100
100,又读进了一个
50
50
50,然后我要把一个数拿出,那我就只能拿
100
100
100,因为它是先进去的。
就像这张图一样,把数或其他类型放入一个传送带,右面的小人只能拿到先进去的,不可能拿到后进去的(你可别说小人可以跑到左边)。先放入的是队首,后放入的是队尾
队列和数组有何区别呢?请看表格
队列 | 数组 |
---|---|
只能访问头和尾的元素 | 可以访问任意一个元素 |
只能处理头和尾的元素 | 可以处理任何一个元素 |
首尾操作 O ( 1 ) 的复杂度 O(1)的复杂度 O(1)的复杂度 | 访问 O ( 1 ) O(1) O(1),删除、中间插入 O ( n ) O(n) O(n) |
只能遵循先进先出的原则 | 无规则 |
所以,数组比队列更有优势,但是队列处理开头结尾的速度比数组快,而且比数组简单,只不过队列能解决的问题没有数组多。不过我们可以根据问题灵活选择不同的数据结构嘛!毕竟队列在只需要处理开头结尾的问题上,比数组还优。
想要实现队列十分简单,因为STL库里就有队列的模板,只要调用就行了。
队列实现
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
queue<int> q;
q.push(10);
q.push(6);
q.push(6);
cout<<q.size()<<"\n";
cout<<q.front()<<"\n";
cout<<q.back();
return 0;
}
这就是队列的代码
实现讲解
定义队列应用queue,尖括号里填队列里装的元素的类型,代码中装的是整型。
对队列的处理是有自带函数的,不用我们手写(如果你想就当我没说),那我给大家介绍一下这些函数
函数讲解
#include<bits/stdc++.h>
using namespace std;
int main(){
queue<int> q;
q.push(10);
q.push(6);
q.push(6);
cout<<"队首:"<<q.front()<<endl;
cout<<"队尾:"<<q.back()<<endl;
cout<<"长度:"<<q.size()<<endl;
q.pop();
q.pop();
q.pop();
if(q.empty()==true)
cout<<"空了";
return 0;
}
.push():作用是在队尾添加一个元素,元素写在括号里,当然括号里可以填变量。
.front():作用是读取当前队首的元素,但不删除这个元素。
.back():作用是读取当前队尾的元素,但不能删除这个元素。
.pop():作用是删除当前队首的元素。
.size():这个你们猜也能猜到是获取队列的长度的作用。
.empty():作用是判断队列是不是空的,如果是空的就返回true,不是就返回false。
代码讲解
上面那个代码的运行结果是:
首先,入队了10、6、6。
调用.front(),目前的队首,也就是最先入队的那个元素是10,将其输出。
调用.back()函数,目前的队尾,也就是最后入队的那个元素是6,将其输出。
调用.size()函数,目前队列的长度是3,将其输出。
调用3次.pop()函数,第一次删除队首,把10删除,第二次删除队首,目前没了10,6是队首,将其删除。第三次把目前的队首6删除。
调用.empty()函数,目前是空,返回的是true,输出“空了”。
程序结束
总结
队列整体比较好理解,调用库函数的队列实现也简单,如果还不懂啥是函数,赶快去学一下。我是小汉堡,可以点个关注吗?谢谢!拜拜~