数据结构 (3)栈与队列之粗心的人如何写oj血的教训
栈
栈是种特殊的线性表,他先入后出
,后进先出
入数据为压栈,且在栈顶入
,出数据为弹栈或者出栈,且在栈顶出
栈好比是枪,压子弹为入栈,射击为出栈
- 压栈
- 出栈
就像你啃鸡爪子一样,你从包装袋里拿出来,从上往下,一点一点的啃,你想下,或者去买个试试看
案例:
1234依次进栈出栈顺序是什么样?
后文解答
实现
- 那么这么实现,有俩种方法
- 顺序表
- 链表
那种方法更优?其实是顺序表为啥!!为啥不是链表?听我徐徐道来
栈的结构先进后出,后进先出,如果(
单)链表
来实现栈,栈顶只有头插方便,栈尾插太麻烦,用双向带头链表又显的大题小作
了,且他们要更改节点的链接关系,用顺序表就不一样了,把栈顶设为尾插,出栈覆盖完美解决
带着疑惑看文章:
- 他和顺序表的区别在哪
栈的实现
队列
队列刚好与栈反过来,先入先出
,后入后出,但是他也是单头出,单头插,但是他们不是在一个同一个口,进出,他们分工明确
是否记得上小学的时候,放学要排好队在一起走出校门,那么排在第一个(个子矮的)的就先出校门,排在(个子高的)最后出校门,可以把排队抽象成入队列,出校门为出队列
实现
- 实现,有俩种方法
- 顺序表
- 链表
那种方法更优呢?可想而之肯定是列表毕竟顺序表的
头插头删效率低
,且麻烦,所以用链表,且是单链表!!为什么不用双链表,问就是懒,他需要链接太多了,用单链表标记一个尾,顺歪歪
队列的实现
案例:
1234依次进队列出队列的顺序是什么样?
后文解答
粗心的人如何写oj
- 都说慢工出细活,那么粗心人一定做事火急火燎的
这种事情常常发生在我身上,写代码草草画个图感觉差不多了(还没理清楚细节),快速上手,写的时候下笔如有神,几分钟就敲完了,跑起来这错哪错,要么少打个单词,要么逻辑写反,复制变量把类型也复制…………这样小小的错误往往让我花了许多的时间排错,得不偿失.最重要的是死不悔改,都说吃了亏会长记性为什么,我却被打成大花脸!!!
括号匹配
题:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合
。
左括号必须以正确的顺序闭合
。
案例:
示例3,与5,可以看出,俩个括号相对才是正确,且不能“夹心”。用奥利奥+开心消消乐来解释,
左括号为奥,右括号为利
,奥+利就可吃掉(销毁
),且他们口味必须
相同口味组成才可以吃
思路:
这是一道栈的经典题,类似开心消消乐,如何实现?其实不难,遇到左边括号入栈
,遇到右括号出栈
,比较是否匹配
图解:
⚠️⚠️提醒
- 这题测试案例很多且刁钻,需要细心想出他的限制条件
题目链接
用队列实现栈
题:
请你仅使用
两个队列
实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
如题所示用队列实现栈
题解:
上述所说,队列先进先出
,而队列后先进后出
,题目给了我们俩个队列,那么意图是让我们利用它.他们底层逻辑反如何操作呢?那么我们刚好可以把握这一点,我先把队列的 n-1 个数据移到另一个队列
中,释放那留下的元素
,上述操作找不空的那个队列及其重要
图解:
⚠️⚠️提醒
- 防止粗心
- 写题前先画图,捋清逻辑
- 复制粘贴要看好,虽然复制粘贴可以省时间但是,粗心复排拍错话费他的10倍不止
- 搞清楚盘空的条件,不要粗心看错了,一件事是否成功,往往在于小细节处理
题目链接
用栈实现队列
题目:
请你仅使用
两个栈
实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除
并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空
,返回 true ;否则,返回 false
题解:
俩个栈实现如何实现,其实不难,俩个栈,一个入数据
,一个出数据
,出队列时候,把如数据的栈的数据给出数据相当一次排序
⚠️⚠️提醒
- 判空,没错我又挖坑自己跳,血的教训(找错10分钟,改错几秒钟)
- 题目链接
设计循环队列
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(frist into frist out 先进先出)原则并且
队尾被连接在队首之后以形成一个循环
。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间
。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。(但是使用循环队列,我们能使用这些空间去存储新的值)<–这里就类似RPG战力排行类似,有新的大佬进来,老的就要被替换
思路
用顺序表实现,创造一个循环循环队列,然后在此基础上增删查改,但是他有一个缺陷,如图:
上面的情况,就无法判断循环队列满or不满,它们直接影响后面的增删查改
改进:
在上述基础上,开辟空间的时候在多开辟一个位置
,那么即可分清队列是否满,只需判断尾指针的下一个是否与头指针相同(这都是在比下标
),相同为满,不同为空
如何让顺序表循环呢?我还头次听,要怎么实现,来吧颠覆世界观的来了,只需把控他的下标,如果下标超过数组最大下标
就重制下标
,这样顺序表就是循环的来
题目链接
代码链接
粗心的长征还没有到此结束,且我付出的代价也远远不止这些,可为什么“我”还没有长记性呢?俗话说:吃一垫长一智,而我对我来说现在这些错误对我来说如天边的浮云那般,没有引起我的注视,但我深刻他确实成长路上致命的杀手,我预估,我细心一点,我每天至少可以省下3个多小时,而我却觉得时间不够,这可能就是无意义的努力,我知道避免粗心的方法有一个,正念冥想,做题前进行几分钟的冥想可以减少错误.
数据结构 (3)栈与队列之粗心的人如何写oj血的教训相关推荐
- 【数据结构】栈、队列、堆的python实现
[数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...
- C语言【数据结构】栈和队列【OJ题(C++)、选择题】
目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...
- 数据结构~07.栈和队列的基本概念
数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...
- 10.数据结构:栈和队列
大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...
- 【数据结构】栈与队列区分push pop offer poll containsKey put等
目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...
- 算法与数据结构(part5)--栈与队列
学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...
- 数据结构03栈和队列
第三章栈和队列 STL 栈:stack http://blog.csdn.net/weixin_37289816/article/details/54773495 队列: queue http:// ...
- 用Java描述数据结构之栈和队列,以及栈和队列的常用方法
一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然.它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具 ...
- 数据结构 3-0 栈与队列总结
总结 栈和队列都可以看作对输入输出做限制的线性表.其中栈是限制了输入和输出只能在一端进行的线性表,可以将其看作向箱子里面摞书,想要取出最下面的书必须要先拿出上面的书,对应栈先进后出的特点.而队列正如其 ...
最新文章
- linux php安装RabbitMq扩展
- 【ssi】增删改查六操作小框架(八)
- 从开源自治,到微服务云化,阿里云的这款产品给了一剂提升微服务幸福感的良药
- SQL Server安全(11/11):审核(Auditing)
- 手游server之数据IO进化
- 软件开发者如何准备未来?
- Django models中关于blank与null的补充说明
- Shell判断参数是否为数字的6种方法(是否为整形)
- spring MVC要注意的地方 2
- 华为手机短息没有声音解决方案
- 理解ThreadLocal(一)
- 基于javaweb+SSM的药品管理系统(java+SSM+html+jQuery+Tomcat+mysql)
- kX3552 驱动、安装、插件集合贴
- STM32 电机教程 13 - BLDC 电机转速计算
- html版权登记怎么打,版权符号怎么输入_Html版权符号怎么打
- 无线射频专题《IEEE 802.11协议讲解1@路由高级配置项,Beacon周期、RTS阈值、DTIM》
- LUP分解方法,矩阵求逆
- 计算机科学 期刊 模板,计算机学报投稿模板.doc
- Dart笔记(10):Runes
- 人工智能与大数据行业的兴起,主要产生了哪些新的职位?