数据结构之栈、队列(入门)

在STL里就有栈(头文件:stack)和队列(头文件:queue)的容器,但是我们通常手写来实现。因为STL里的栈和队列不能进行遍历,并且运行速度较慢。

一、栈


栈的概念:

 

 

栈(stack)是一个后进先出或先进后出的一个特殊线性表(它只能在栈顶进行入栈或出栈)。

 

 

如图所示:

 


栈的基本操作:

 

 

 

定义:int Stack[maxn],top=0;//top表示当前栈顶元素

入栈:inline void push(int x) {Stack[++top]=x;}

出栈:inline int pop() {return Stack[top--];}

 

 

 

 

判断栈是否为空:inline bool empty() {return top==0 ? 1:0}//表示栈顶若是没有元素,那么就返回真,否则就返回假

 

 

这里有一个需要注意的问题,如果你用了万能头文件(bits/stdc++.h)或者已经调用内置的stack(队列也一样)的话,再在手写的栈中用stack数组,那么它就会出现问题(就是会炸),,所以我们定义变量的时候需要把s改成S或者加点什么(这个随你)。

那么我们接下来再来分析一个很高大上(恶心)的东西,它就是——单调栈。

什么是单调栈?

单调栈其实和一般的栈差不多,唯一不同的一点就是它是递增或者递减的。

for example:

现有如下两个栈:

stack1:1 2 3 2 5

stack2:1 2 3 4 5

由概念得:第一个就是普通的栈,第二个就是传说中的单调栈。

二、队列

队列的概念:

队列(queue)是一个先进先出或后进后出的特殊线性表。(和栈相反)

如图所示:

队列的基本操作:

定义:int Queue[maxn],head=0,tail=0;//head指向队首元素,tail指向队尾元素(有些地方会把队首写成front,队尾写成rear 反正都一样) (注意初始化)

入队:inline void push(int x) {Queue[++tail]=x;}//x表示入队元素

出队:inline int pop() {return Queue[head++];}

判断栈是否为空:inline bool empty() {return head>tail ? 1:0;}

队列中元素的个数:tail-head+1

这样的队列有一个缺陷——溢出

如:0 0 0 1 2 3 4 5 6 ······ maxn 

如果maxn后还有元素,那么就会上溢出。

如果要处理这种情况,那么就要用到循环队列。

循环队列:把链状队列变成了环状队列。
环状队列的基本操作:

入队: inline void push(int x){Queue[head]=x;tail=(tail+1)%n;}

出队:inline int pop(){int t=Queue[head];head=(head+1)%n;return t;}

判断队满或队空:inline bool empty(){return head==(tail+1)%n ?1:0}

 

当然,还有最神奇的单调队列

什么是单调队列?

单调队列是双端队列的一种,可以在对头和队尾同时进行入队和出队,当然它也是有单调性的。由于它能同时进行入队和出队,于是大大地提高了它的运行速度。

单调队列的基本操作和基础的队列(循环队列)相似,有一点点的改动,我就不再列举了~

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值