(三)数据结构之“栈”
生活随笔
收集整理的這篇文章主要介紹了
(三)数据结构之“栈”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構之“棧”
- 棧是什么
- 棧的應用場景
- 場景一:十進制轉二進制
- 場景二:有效的括號
- 場景三:函數調用堆棧
- JS中的函數調用堆棧
- LeetCode:20.有效的括號
- LeetCode:144.二叉樹的前序遍歷
- 技術要點
- 思考題
棧是什么
一個后進先出的數據結構
JavaScript中沒有棧,但可以用Array實現棧的所有功能
棧的應用場景
需要后進先出的場景
比如:十進制轉二進制、判斷字符串的括號是否有效、函數調用堆棧…
場景一:十進制轉二進制
后出來的余數反而要排到前面
把余數依次入棧,然后再出棧,就可以實現余數倒序輸出
場景二:有效的括號
越靠后的左括號,對應的右括號越靠前
左括號入棧,右括號出棧,最后棧空了就是合法的
場景三:函數調用堆棧
最后調用的函數,最先執行完
JS解釋器使用棧來控制函數的調用順序
JS中的函數調用堆棧
const func1 = () => {func2(); }; const func2 = () => {func3(); }; const func3 = () => {};func1();LeetCode:20.有效的括號
解題思路
對于沒有閉合的左括號而言,越靠后的左括號,對應的右括號越靠前
滿足后進先出,考慮用棧
輸入:"{[]}" 輸出:true
解題步驟
新建一個棧
掃描字符串,遇左括號入棧,遇到和棧頂括號類型匹配的右括號就出棧,類型不匹配直接判定為不合法
最后棧空了就合法,否則不合法
時間和空間復雜度都為O(n)
LeetCode:144.二叉樹的前序遍歷
時間復雜度O(n)空間復雜度O(n)
通過這個例子可以知道棧的作用可以模擬遞歸、改寫遞歸
技術要點
棧是一個后進先出的數據結構
JavaScript中沒有棧,但可以用Array實現棧的所有功能
棧常用操作:push、pop、stack[stack.length-1]
思考題
1、請用 ES6 的 class,封裝一個 Stack 類,包括 push、pop、peek 方法。
2、請用棧這個數據結構,將100這個十進制數字轉為二進制。
總結
以上是生活随笔為你收集整理的(三)数据结构之“栈”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (二) 时间/空间复杂度计算
- 下一篇: (四)数据结构之“队列”