栈和队列

  • 理论讲解
    • 栈,或者堆栈
    • 队列
  • 面试题
    • 20.有效的括号valid-parentheses
    • 232.用栈实现队列implement-queue-using-stacks
    • 225.用队列实现栈implement-stack-using-queues

理论讲解

栈,或者堆栈

FILO,先入后出
实现:数组和链表

队列

FIFO,先入先出
应用:消息队列
时间复杂度(如图)

常见的复杂度(是上面链接的最后一张图)

面试题

面试题应该不会直接让手写构造栈和队列。

leetcode。

20.有效的括号valid-parentheses

String大中小括号➡合法?
①‘()’,合法
②‘()【】’,合法
③‘(【)】’,不合法
④’]][[’, 不合法
⑤’((([]))’,不合法
只可以用堆栈
思考过程:
判断入栈元素规则:
a. 若是左括号(小中大)则push;
b. 若是右括号,则查看其peek是否为左,是的话pop;
c. 当输入全部检查完成后,判断stack是否empty;

时间复杂度O(n),空间复杂度O(n);

class Solution:def isValid(self, s: str) -> bool:a = []r = {')':'(', ']':'[', '}':'{'}for i in s:if i not in r:a.append(i)elif not a or r[i] != a.pop():return Falseif a:              # 最后三行也可写为 return not areturn Falsereturn True 

代码思路:
第二行运用map或者字典将所有可能性进行储存,

232.用栈实现队列implement-queue-using-stacks

工作中很少会遇到这种(比较奇怪的转换)
Stack–>Queue
用两个栈,一个输入栈、一个输出栈;
实现队列的push、pop、peek;
要输出的话就只看输出栈内容,取其peek并pop,如果为空,则从输入栈输出元素到输出栈(比较好理解),也就是说每个元素从输入到输出必须要入两个栈,调整下顺序,就变成先入先出了。

class MyQueue:def __init__(self):"""Initialize your data structure here."""a = []b = []self.a = aself.b = bdef push(self, x: int) -> None:"""Push element x to the back of queue."""self.a.append(x)def pop(self) -> int:"""Removes the element from in front of queue and returns that element."""if self.b:return self.b.pop()else:while self.a:self.b.append(self.a.pop())return self.b.pop()def peek(self) -> int:"""Get the front element."""if self.b:x = self.b[-1]else:x = self.a[0]return xdef empty(self) -> bool:"""Returns whether the queue is empty."""return  (not self.b) and (not self.a)# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()

225.用队列实现栈implement-stack-using-queues

class MyStack:def __init__(self):"""Initialize your data structure here."""self.a = []def push(self, x: int) -> None:"""Push element x onto stack."""self.a.append(x)def pop(self) -> int:"""Removes the element on top of the stack and returns that element."""return self.a.pop()def top(self) -> int:"""Get the top element."""return self.a[-1]def empty(self) -> bool:"""Returns whether the stack is empty."""return not self.a# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()

不常见的话就不琢磨太深了,这就是考原理的题目,掌握了就好,多做些实践性强的题目来巩固知识吧。

祝好

覃超数据结构(二) 栈和队列相关推荐

  1. 实习二 栈、队列和递归算法设计 (题目:停车场管理 )

    一.需求分析 1.每一组输入数据包括:汽车"到达"或"离去"信息.汽车牌照号码以 及到达或离去的时刻. 2.输出信息:若是车辆到达,则输出汽车在停车场内或便道上 ...

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

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

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

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

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

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

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

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

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

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

  7. 数据结构习题——栈和队列(二)

    第3章  栈和队列    一.填空题 1.  线性表.栈和队列都是 线性 结构,可以在线性表的 任何 位置插入和删除元素:对于栈只能在 栈顶 插入和删除元素:对于队列只能在 队尾 插入和 队头 删除元 ...

  8. 数据结构与算法(二) 栈与队列(代码示例)

    数据结构与算法 栈与队列 1. 数组和链表实现栈 2. 用O(1)的时间复杂度求栈中的最小元素 3. 链表和数组实现队列 4. 用两个栈模拟队列操作 1. 数组和链表实现栈 链表的方式: /*** 描 ...

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

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

最新文章

  1. python until语句_Python3 循环
  2. python学习路线-Python最佳学习路线
  3. C# MVC 使用 CKEditor图片上传 提示“不正确的服务器响应”
  4. UIButton的属性设置
  5. where does the route config data of extension component come from
  6. IronPython和C#执行速度对比
  7. 雪花开发者中心地府云自适应1号模板 雪花xueidc插件
  8. 阿里DNS:用LibFuzzer照亮DNS代码的死角
  9. 去黑边_Vegas pro 17导入的素材有黑边咋进行去除的3种方法
  10. 一个具有20位地址和32位字长的存储器_详解西门子间接寻址之存储器间接寻址...
  11. 软件测试-缺陷报告(自己看)
  12. 深度学习进行领域适应(Domain Adaptation)开山之作
  13. thinkPHP5项目上传到centOS服务器后不显示验证码图片
  14. 计算机上机操作表格试题,全国计算机等级考试四Excel电子表格操作试题.doc
  15. 关于c语言图书管理系统的ppt,课件C语言图书管理系统代码.doc
  16. 红米note3 android go,免解锁刷机全教程:红米 NOTE3 全网通 开吃棉花糖
  17. 使用啊D注入工具向asp网站注入攻击
  18. 应用层故事难讲 公链集体押注DeFi背后 是黔驴技穷的无奈之举?
  19. flutter上分之路1-新手教学(配置安装)
  20. 解决:win10下teamviewer检测为商业用途

热门文章

  1. Python创建使用虚拟环境
  2. uniapp 添加本地文件日志 并增加防抖(防止重复写入被覆盖)
  3. 387:字符串中的第一个唯一字符
  4. scipy.misc.imresize的替换方案
  5. 培训班和科班出来的程序员有什么不同之处?
  6. js/jquery(2)
  7. Studio One v4.6.2 x64 WiN 音乐制作编曲宿主软件下载
  8. Invoking “make -j1“ failed
  9. [Thoughts]敏捷方法大全
  10. huaweiUSG6650防火墙web故障