覃超数据结构(二) 栈和队列
栈和队列
- 理论讲解
- 栈,或者堆栈
- 队列
- 面试题
- 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.每一组输入数据包括:汽车"到达"或"离去"信息.汽车牌照号码以 及到达或离去的时刻. 2.输出信息:若是车辆到达,则输出汽车在停车场内或便道上 ...
- 【数据结构】栈、队列、堆的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集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...
- 数据结构习题——栈和队列(二)
第3章 栈和队列 一.填空题 1. 线性表.栈和队列都是 线性 结构,可以在线性表的 任何 位置插入和删除元素:对于栈只能在 栈顶 插入和删除元素:对于队列只能在 队尾 插入和 队头 删除元 ...
- 数据结构与算法(二) 栈与队列(代码示例)
数据结构与算法 栈与队列 1. 数组和链表实现栈 2. 用O(1)的时间复杂度求栈中的最小元素 3. 链表和数组实现队列 4. 用两个栈模拟队列操作 1. 数组和链表实现栈 链表的方式: /*** 描 ...
- 数据结构 3-0 栈与队列总结
总结 栈和队列都可以看作对输入输出做限制的线性表.其中栈是限制了输入和输出只能在一端进行的线性表,可以将其看作向箱子里面摞书,想要取出最下面的书必须要先拿出上面的书,对应栈先进后出的特点.而队列正如其 ...
最新文章
- python until语句_Python3 循环
- python学习路线-Python最佳学习路线
- C# MVC 使用 CKEditor图片上传 提示“不正确的服务器响应”
- UIButton的属性设置
- where does the route config data of extension component come from
- IronPython和C#执行速度对比
- 雪花开发者中心地府云自适应1号模板 雪花xueidc插件
- 阿里DNS:用LibFuzzer照亮DNS代码的死角
- 去黑边_Vegas pro 17导入的素材有黑边咋进行去除的3种方法
- 一个具有20位地址和32位字长的存储器_详解西门子间接寻址之存储器间接寻址...
- 软件测试-缺陷报告(自己看)
- 深度学习进行领域适应(Domain Adaptation)开山之作
- thinkPHP5项目上传到centOS服务器后不显示验证码图片
- 计算机上机操作表格试题,全国计算机等级考试四Excel电子表格操作试题.doc
- 关于c语言图书管理系统的ppt,课件C语言图书管理系统代码.doc
- 红米note3 android go,免解锁刷机全教程:红米 NOTE3 全网通 开吃棉花糖
- 使用啊D注入工具向asp网站注入攻击
- 应用层故事难讲 公链集体押注DeFi背后 是黔驴技穷的无奈之举?
- flutter上分之路1-新手教学(配置安装)
- 解决:win10下teamviewer检测为商业用途
热门文章
- Python创建使用虚拟环境
- uniapp 添加本地文件日志 并增加防抖(防止重复写入被覆盖)
- 387:字符串中的第一个唯一字符
- scipy.misc.imresize的替换方案
- 培训班和科班出来的程序员有什么不同之处?
- js/jquery(2)
- Studio One v4.6.2 x64 WiN 音乐制作编曲宿主软件下载
- Invoking “make -j1“ failed
- [Thoughts]敏捷方法大全
- huaweiUSG6650防火墙web故障