数据结构——队列 c++

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,输出“空了”。

程序结束


总结

队列整体比较好理解,调用库函数的队列实现也简单,如果还不懂啥是函数,赶快去学一下。我是小汉堡,可以点个关注吗?谢谢!拜拜~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值