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

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

前言


唤我沈七就好啦。

这是模拟数据结构系列。

以下是之前同系列文章。


模拟数据结构之绪论

模拟数据结构之链表

模拟数据结构之栈


本次讲解的是队列。

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


什么是队列?


相关概念

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

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

入队:队列的插入操作。

出队:队列的删除操作。


特点:先进先出。

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

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

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

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/


相关文章
|
21天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
103 9
|
1月前
|
缓存 算法 调度
数据结构之 - 双端队列数据结构详解: 从基础到实现
数据结构之 - 双端队列数据结构详解: 从基础到实现
66 5
|
1月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
103 64
|
24天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
25 3
|
23天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
|
1月前
初步认识栈和队列
初步认识栈和队列
61 10
|
1月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
23 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
31 2
【数据结构】--- 栈和队列
【数据结构】--- 栈和队列
下一篇
无影云桌面