一、「 堆疊 」是什麼?
堆疊(stack)是一種先進後出的、操作受限的線性表,也可以直接稱為棧。
可以把棧想象成乙個桶一樣,往這個桶裡面一層一層的放東西,先放進去的在裡面,後放進去的東西依次在外面。但取東西的時候就是先取靠近外面的,再依次一層層取裡面的。這就是 後進先出( last in-first out )的原則。
因此「 棧 」雖然是線性的,有2個端:頂端和底端,但它只允許從一端進行插入和刪除資料,這就是為啥前面說「 棧 」是操作受限的了。
棧只有兩種操作:push 和 pop 。我們用push(壓入)來表示往棧中插入資料,也叫入棧,用pop(彈出)來表示從棧中刪除資料,也叫出棧。我們可以既可以用 「 陣列 」 來實現乙個棧,也可以用 「 鍊錶 」 來實現乙個棧。
二、「 堆疊 」的演算法實踐?
演算法題:給定乙個只包括 '(',')','','[',']' 的字串,判斷字串是否有效。有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。舉例:字串 "()"有效、"(){}"有效、"(]"無效、"([)]"無效、""有效。解題思路:使用1個堆疊即可解決,依次遍歷這個字串,如果遇到是左括號就入棧到堆疊中,如果遇到的是右括號,則從堆疊中取出棧頂的第乙個左括號,比對一下這個左括號和當前遇到的右括號是否匹配,如果不匹配這認為這整個字串無效。如果能匹配,則ok,刪除這個左括號和右括號,繼續往後走,繼續遍歷字串中剩下的字元,只要遇到左括號就入棧,只要遇到右括號就與將棧頂的左括號出棧與之比較。一直走到字串結束,再來檢查堆疊中是否還有元素,如果還有元素,則這個字串同樣無效,如果堆疊為空,則字串有效。就以這個思路實現乙個初版**:class solution ' ); map.put('[', ']'); for(int i=0;i
演算法一看就懂之 堆疊
一 堆疊 是什麼?堆疊 stack 是一種先進後出的 操作受限的線性表,也可以直接稱為棧。可以把棧想象成乙個桶一樣,往這個桶裡面一層一層的放東西,先放進去的在裡面,後放進去的東西依次在外面。但取東西的時候就是先取靠近外面的,再依次一層層取裡面的。這就是 後進先出 last in first out ...
演算法一看就懂之 陣列與鍊錶
資料結構是我們軟體開發中最基礎的部分了,它體現著我們程式設計的內功。大多數人在正兒八經學習資料結構的時候估計是在大學計算機課上,而在實際專案開發中,反而感覺到用得不多。其實也不是真的用得少,只不過我們在使用的時候被很多高階語言和框架元件封裝好了,真正需要自己去實現的地方比較少而已。但別人封裝好了不代...
一看就懂的SwitchHosts
switchhosts 是乙個管理 切換多個 hosts 方案的工具。它是乙個免費開源軟體。日常開發工作中,我們可能經常需要切換各種 hosts 繫結,比如在本地開發時可能需要乙個開發環境的 hosts 繫結方案,發布到測試環境後又有乙個測試環境的 hosts 繫結方案,然後可能還有乙個預發布環境,...