栈是种特殊的线性表,他先入后出后进先出
入数据为压栈,且在栈顶入,出数据为弹栈或者出栈,且在栈顶出

栈好比是枪,压子弹为入栈,射击为出栈

  • 压栈
  • 出栈

就像你啃鸡爪子一样,你从包装袋里拿出来,从上往下,一点一点的啃,你想下,或者去买个试试看


案例:
1234依次进栈出栈顺序是什么样?
后文解答

实现

  • 那么这么实现,有俩种方法
  1. 顺序表
  2. 链表

那种方法更优?其实是顺序表为啥!!为啥不是链表?听我徐徐道来

栈的结构先进后出,后进先出,如果(单)链表来实现栈,栈顶只有头插方便,栈尾插太麻烦,用双向带头链表又显的大题小作了,且他们要更改节点的链接关系,用顺序表就不一样了,把栈顶设为尾插,出栈覆盖完美解决


带着疑惑看文章:

  1. 他和顺序表的区别在哪
    栈的实现

队列

队列刚好与栈反过来,先入先出,后入后出,但是他也是单头出,单头插,但是他们不是在一个同一个口,进出,他们分工明确

是否记得上小学的时候,放学要排好队在一起走出校门,那么排在第一个(个子矮的)的就先出校门,排在(个子高的)最后出校门,可以把排队抽象成入队列,出校门为出队列

实现

  • 实现,有俩种方法
  1. 顺序表
  2. 链表

那种方法更优呢?可想而之肯定是列表毕竟顺序表的头插头删效率低,且麻烦,所以用链表,且是单链表!!为什么不用双链表,问就是懒,他需要链接太多了,用单链表标记一个尾,顺歪歪


队列的实现
案例:
1234依次进队列出队列的顺序是什么样?
后文解答


粗心的人如何写oj

  • 都说慢工出细活,那么粗心人一定做事火急火燎的

这种事情常常发生在我身上,写代码草草画个图感觉差不多了(还没理清楚细节),快速上手,写的时候下笔如有神,几分钟就敲完了,跑起来这错哪错,要么少打个单词,要么逻辑写反,复制变量把类型也复制…………这样小小的错误往往让我花了许多的时间排错,得不偿失.最重要的是死不悔改,都说吃了亏会长记性为什么,我却被打成大花脸!!!

括号匹配

题:

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合
左括号必须以正确的顺序闭合

案例:

示例3,与5,可以看出,俩个括号相对才是正确,且不能“夹心”。用奥利奥+开心消消乐来解释,左括号为奥,右括号为利奥+利就可吃掉(销毁),且他们口味必须相同口味组成才可以吃

思路:

这是一道栈的经典题,类似开心消消乐,如何实现?其实不难,遇到左边括号入栈,遇到右括号出栈,比较是否匹配


图解:

⚠️⚠️提醒

  1. 这题测试案例很多且刁钻,需要细心想出他的限制条件

题目链接

用队列实现栈

题:

请你仅使用两个队列实现一个后入先出(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

题解:
俩个栈实现如何实现,其实不难,俩个栈,一个入数据,一个出数据,出队列时候,把如数据的栈的数据给出数据相当一次排序



⚠️⚠️提醒

  1. 判空,没错我又挖坑自己跳,血的教训(找错10分钟,改错几秒钟)
  • 题目链接

设计循环队列

设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(frist into frist out 先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。(但是使用循环队列,我们能使用这些空间去存储新的值)<–这里就类似RPG 战力排行类似,有新的大佬进来,老的就要被替换

思路
用顺序表实现,创造一个循环循环队列,然后在此基础上增删查改,但是他有一个缺陷,如图:

上面的情况,就无法判断循环队列满or不满,它们直接影响后面的增删查改

改进:
在上述基础上,开辟空间的时候在多开辟一个位置,那么即可分清队列是否满,只需判断尾指针的下一个是否与头指针相同(这都是在比下标),相同为满,不同为空

如何让顺序表循环呢?我还头次听,要怎么实现,来吧颠覆世界观的来了,只需把控他的下标,如果下标超过数组最大下标重制下标 ,这样顺序表就是循环的来

题目链接


代码链接


粗心的长征还没有到此结束,且我付出的代价也远远不止这些,可为什么“我”还没有长记性呢?俗话说:吃一垫长一智,而我对我来说现在这些错误对我来说如天边的浮云那般,没有引起我的注视,但我深刻他确实成长路上致命的杀手,我预估,我细心一点,我每天至少可以省下3个多小时,而我却觉得时间不够,这可能就是无意义的努力,我知道避免粗心的方法有一个,正念冥想,做题前进行几分钟的冥想可以减少错误.

数据结构 (3)栈与队列之粗心的人如何写oj血的教训相关推荐

  1. 【数据结构】栈、队列、堆的python实现

    [数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...

  2. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  3. 数据结构~07.栈和队列的基本概念

    数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...

  4. 10.数据结构:栈和队列

    大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...

  5. 【数据结构】栈与队列区分push pop offer poll containsKey put等

    目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...

  6. 算法与数据结构(part5)--栈与队列

    学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...

  7. 数据结构03栈和队列

    第三章栈和队列 STL 栈:stack http://blog.csdn.net/weixin_37289816/article/details/54773495 队列: queue  http:// ...

  8. 用Java描述数据结构之栈和队列,以及栈和队列的常用方法

    一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然.它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具 ...

  9. 数据结构 3-0 栈与队列总结

    总结 栈和队列都可以看作对输入输出做限制的线性表.其中栈是限制了输入和输出只能在一端进行的线性表,可以将其看作向箱子里面摞书,想要取出最下面的书必须要先拿出上面的书,对应栈先进后出的特点.而队列正如其 ...

最新文章

  1. linux php安装RabbitMq扩展
  2. 【ssi】增删改查六操作小框架(八)
  3. 从开源自治,到微服务云化,阿里云的这款产品给了一剂提升微服务幸福感的良药
  4. SQL Server安全(11/11):审核(Auditing)
  5. 手游server之数据IO进化
  6. 软件开发者如何准备未来?
  7. Django models中关于blank与null的补充说明
  8. Shell判断参数是否为数字的6种方法(是否为整形)
  9. spring MVC要注意的地方 2
  10. 华为手机短息没有声音解决方案
  11. 理解ThreadLocal(一)
  12. 基于javaweb+SSM的药品管理系统(java+SSM+html+jQuery+Tomcat+mysql)
  13. kX3552 驱动、安装、插件集合贴
  14. STM32 电机教程 13 - BLDC 电机转速计算
  15. html版权登记怎么打,版权符号怎么输入_Html版权符号怎么打
  16. 无线射频专题《IEEE 802.11协议讲解1@路由高级配置项,Beacon周期、RTS阈值、DTIM》
  17. LUP分解方法,矩阵求逆
  18. 计算机科学 期刊 模板,计算机学报投稿模板.doc
  19. Dart笔记(10):Runes
  20. 人工智能与大数据行业的兴起,主要产生了哪些新的职位?

热门文章

  1. GitHub学生包申请(学生认证)教程,国内外主流云主机平台对比
  2. 《番茄工作法》读书笔记与总结
  3. Vue插件视频播放插件
  4. 两级分销加两级代理佣金计算工具
  5. mysql holdlock_mysql事务隔离界别与锁机制
  6. 大数据挖掘技术在金融保险行业中的用途
  7. 中国卫生和无菌阀市场趋势报告、技术动态创新及市场预测
  8. 一步一步学做一个CPU——3,用QuartusII通过原理图完成与门电路设计
  9. 3.6 杭电复试题2010
  10. 小linux软件下载,超小的Linux发行版Puppy Linux 8.0发布下载