算法模版:模拟数据结构之队列

简介: 算法模版:模拟数据结构之队列

前言


唤我沈七就好啦。

这是模拟数据结构系列。

以下是之前同系列文章。


模拟数据结构之绪论

模拟数据结构之链表

模拟数据结构之栈


本次讲解的是队列。

因为队列和栈很类似,大家可以对比着去记。


什么是队列?


相关概念

队头:允许元素删除的一端。

队尾:允许元素插入的一端。

入队:队列的插入操作。

出队:队列的删除操作。


特点:先进先出。

即后面的元素需要等先进来的元素在队头出队后才能出队。

这是因为队列中的元素只能在队尾入队在队头出队,即入口只能入,出口只能出。可以通过下图来辅助理解。

队列也是线性表的一种,可以理解为仅能在两端插入和删除的数组。

8.png


实现思路


前面提到,队列可以理解为仅能在两端插入和删除的数组。而这正是我们实现思路。


实现方法


1 .创建变量


int qu[N]; 储存队列元素的数组
int hh=0;  队头
int tt=-1; 队尾
初始化很重要!!!


将队尾变量初始化为 -1 是为了方便最后判断队是否为空。


2 . 插入操作

if(a=="push")
 cin>>x;
 qu[++tt]=x;  元素只能在队尾入队


当输入 push 5 时 ,5这个元素就入队了。

注意这里一定要是 ++tt 让下标是0, 因为 tt 初始化的是 -1。

如果 tt++ 下标就是 - 1 了。


3 .删除操作


else if(a=="pop")
hh++;
注意元素只能队头弹出,且是 ++


当输入 pop 5 时 ,5这个元素就出队了。

注意这里确实并没有真正删除放在队尾的元素,但队尾上升了一位,就可以理解为删除了下一位。

这里也不需要考虑空间浪费问题。


4 .判断队空

else if(a=="empty")   队内是否为空
{
       if(tt<hh)
       cout<<"YES"<<endl;
       else
       cout<<"NO"<<endl;
 }


因为 tt 初始化的时候是 -1,所以如果 tt << hh 就说明没有任何元素插入过。

当输入 empty 时 ,返回 YES队就为空 , 返回 NO 队就非空。


完整模板

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int qu[N],hh=0,tt=-1;//初始化很重要!!!
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int x;
        string a;
        cin>>a;
        if(a=="push")
        cin>>x,qu[++tt]=x;//元素只能队尾入队
        else if(a=="pop")
        hh++;//注意元素只能队头弹出,且是 ++
        else if(a=="empty")//队内是否为空
        {
            if(tt<hh)
            cout<<"YES"<<endl;
            else
            cout<<"NO"<<endl;
        }
        else//查询队头
        cout<<qu[hh]<<endl;
    }
    return 0;
}


完结散花


ok以上就是对模拟数据结构之队列的全部讲解啦,很感谢你能看到这儿啦。如果有遗漏、错误或者有更加通俗易懂的讲解,欢迎小伙伴私信我,我后期再补充完善。


参考文章


https://www.acwing.com/


相关文章
|
1月前
|
算法
【优选算法专栏】专题十三:队列+宽搜(一)
【优选算法专栏】专题十三:队列+宽搜(一)
30 0
|
1月前
|
消息中间件 存储 搜索推荐
深入理解栈和队列(二):队列
深入理解栈和队列(二):队列
39 0
|
1月前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
42 0
|
4天前
栈与队列理解
栈与队列理解
10 1
|
4天前
|
存储 算法
数据结构与算法 栈与队列
数据结构与算法 栈与队列
10 0
数据结构与算法 栈与队列
|
4天前
|
C++
数据结构(顺序队列 循环队列
数据结构(顺序队列 循环队列
8 0
|
5天前
|
容器
【栈与队列】栈与队列的相互转换OJ题
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
10 0
|
7天前
|
C语言
猿创征文|栈和队列OJ刷题
猿创征文|栈和队列OJ刷题
[数据结构]~栈和队列(0-1)
[数据结构]~栈和队列(0-1)
|
13天前
|
存储
栈与队列练习题
栈与队列练习题