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

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

前言


唤我沈七就好啦。

这是模拟数据结构系列。

以下是之前同系列文章。


模拟数据结构之绪论

模拟数据结构之链表

模拟数据结构之栈


本次讲解的是队列。

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


什么是队列?


相关概念

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

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

入队:队列的插入操作。

出队:队列的删除操作。


特点:先进先出。

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

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

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

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/


相关文章
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
1066 9
|
2月前
|
存储 监控 算法
基于 Go 语言跳表结构的局域网控制桌面软件进程管理算法研究
针对企业局域网控制桌面软件对海量进程实时监控的需求,本文提出基于跳表的高效管理方案。通过多级索引实现O(log n)的查询、插入与删除性能,结合Go语言实现并发安全的跳表结构,显著提升进程状态处理效率,适用于千级进程的毫秒级响应场景。
169 15
|
2月前
|
分布式计算 并行计算 算法
《数据之美》:图结构的精妙世界与算法实践
图是表示多对多关系的非线性数据结构,由顶点和边组成,可建模社交网络、路径导航等复杂系统。核心算法包括BFS/DFS遍历、Dijkstra最短路径、Floyd-Warshall全源最短路径,以及Prim和Kruskal最小生成树算法,广泛应用于推荐系统、社交分析与路径规划。
|
3月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
265 3
|
3月前
|
存储 监控 算法
企业电脑监控系统中基于 Go 语言的跳表结构设备数据索引算法研究
本文介绍基于Go语言的跳表算法在企业电脑监控系统中的应用,通过多层索引结构将数据查询、插入、删除操作优化至O(log n),显著提升海量设备数据管理效率,解决传统链表查询延迟问题,实现高效设备状态定位与异常筛选。
142 3
|
8月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
282 1
232.用栈实现队列,225. 用队列实现栈
在232题中,通过两个栈(`stIn`和`stOut`)模拟队列的先入先出(FIFO)行为。`push`操作将元素压入`stIn`,`pop`和`peek`操作则通过将`stIn`的元素转移到`stOut`来实现队列的顺序访问。 225题则是利用单个队列(`que`)模拟栈的后入先出(LIFO)特性。通过多次调整队列头部元素的位置,确保弹出顺序符合栈的要求。`top`操作直接返回队列尾部元素,`empty`判断队列是否为空。 两题均仅使用基础数据结构操作,展示了栈与队列之间的转换逻辑。
|
11月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
560 77
|
10月前
|
算法 调度 C++
STL——栈和队列和优先队列
通过以上对栈、队列和优先队列的详细解释和示例,希望能帮助读者更好地理解和应用这些重要的数据结构。
265 11
|
11月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
463 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】

热门文章

最新文章