数据结构&与算法&栈

发布于:2022-11-29 ⋅ 阅读:(310) ⋅ 点赞:(0)

(栈)&队列

一:什么是栈?

stack是一种特殊的线性数据集合,只准许在栈顶进行操作元素,在栈顶加入(push())在栈顶删除(pop()),采取是的先进后出的原则。

二:栈按存储结构又分为哪两种?

  1. 栈底层结构为一维数组就是顺序栈,在JAVA中使用java.until.Stack类来实现的
  2. 栈底层结构为链表时就是链式栈, 是用列表Linkedlist来实现的

三:那么顺序栈与链栈有什么区别?

  • 对于顺序栈(Stack)栈来说,它是vector的子类。底层是通过一个数组来实现的,它是线程安全的,顺序栈是静态分配空间的,最大容量空间收到的限制,顺序栈遍历速度快,写操作慢与链栈。
  • 对于链栈(Stack)来说,它底层是是通过一条链表(linkedlist)来存储的数据的,是线程不安全的,链栈式动态分配空间的 ,不需要考虑空间的限制,链栈的写的速度快,读的式慢与顺序栈 的。

四:栈常见的应用场景有哪些?

  1. 浏览器的回退和前进:实现的网页的请进后退,实际上使用到了两个栈来实现的,当你看了1 2 3 4四个界面时,将这四个页面押入到栈1中,突然想看页面2个所以点击回退两次,将把栈顶的3 4页面给押入到栈2中,这时候就能看到页面2了,当你突然有想看4在点击两次次前进按钮,将栈2的页面在押入到栈1中这样就可以看到了。

2.虚拟机栈:每一个线程又会有自己一个独立的存储空间,这个空间就是虚拟机栈,被称为是虚拟机栈,这里的虚拟机栈是由一个个栈帧组成的,栈里帧包括局部变量表,操作数栈,动态连接,方法出口信息,当你调用对应的方法时候,这个方法的栈帧就会押入到栈中,当这个方法调用结束时,也就伴随这个栈被抛出了栈,

五:栈常见的手撕代码有哪些?

1.检查符号是否成队出现

实现思路:首下将所有的右括号作为键存在map集合中,左括号作为值。遍历给的括号字符串将遍历到左括号加到栈中,如果遍历到右括号的话将栈中的左括号从栈里面拿出来与集合中的对应的左括号进行比较,一样返回true否则返回false.

 

2.实现字符串的反转

实现思路:遍历字符串然后将字符串一次押入到栈中,后从栈中一次取出。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到