必須學好的數(shù)據(jù)結構知識:隊列與棧!今天再來給你上一課

在數(shù)據(jù)結構中,隊列與棧的產生主要是為了滿足某些特殊的編程運算,數(shù)據(jù)結構最大的一個特點就是為算法提供基礎,使用不用的數(shù)據(jù)結構甚至能直接影響算法的好壞,多數(shù)情況下,數(shù)據(jù)結構與算法是一種相輔相成的關系。
棧:和我們上節(jié)說到的一樣,棧也是一種線性的存儲結構。但是它限制了只能在線性表的尾部進行數(shù)據(jù)插入和刪除操作,根據(jù)一張圖示來進行形象說明。

棧的數(shù)據(jù)存放原則遵循 先進后出 的數(shù)據(jù)存放原則,因為它的數(shù)據(jù)出口只有一個,那就是棧頂,也就是上面所說的棧尾。如果一個棧里面沒有數(shù)據(jù)元素的存放又被稱之為 空棧,這種數(shù)據(jù)結構比較常用的場景就是程序計算中關于后綴表達式的計算。
隊列:同樣隊列也是線性存儲結構,和棧的數(shù)據(jù)處理方式正好是相反的,它是在線性表的一端進行數(shù)據(jù)插入,另一端則進行刪除操作,根據(jù)圖示來進行說明。

隊列的數(shù)據(jù)存放原則遵循 先進先出 的存放原則,因為它擁有兩個出口,一個出口專門負責數(shù)據(jù)進入、另一個出口專門負責數(shù)據(jù)出去,數(shù)據(jù)進入對應的就是數(shù)據(jù)插入、數(shù)據(jù)出去對應的就是數(shù)據(jù)刪除。
在 Java 語言中,同樣有關于隊列與棧的實例對象的實現(xiàn)。隊列對應的接口對象是 Queue、棧對應的則是 Stack,下面來看一下其中的部分源碼分析。

Stack()有自己的實例化對象,Queue()只定義了接口,它是在其他表的對象中實現(xiàn)的,我們選擇使用 LinkedList<Object>?對 Queue()的實例化源碼來說明。

根據(jù)源碼分析,我們尋找到 LinkedList 實例實現(xiàn)了隊列接口,那么我們來看一下它的入隊方法是怎樣的。

注意:線性表與鏈表通常也是一起使用的,所以說數(shù)據(jù)結構外部使用線性表、內部再使用鏈表是非常的常見的數(shù)據(jù)結構的組裝形式。
文章來源于:微信公眾號【老王說編程】
另外作為一名編程學習者,如果你想更好的提升你的編程能力,好好學習C/C++編程知識以及數(shù)據(jù)結構,以后努力成為高薪算法/軟件開發(fā)工程師的話!

分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!