標籤:

棧,隊列

棧:數據結構中的一種,他的插入和刪除都在同一個位置,也就是棧頂(top)的位置。棧的基本操作很簡,只有入棧(push)和出棧(pop),前者為插入,後者為刪除。對於空棧不能進行出棧操作,可以先使用top操作進行判斷。但是,在push時如果空間用盡了,並不是一個錯誤操作。

棧的基本特點是後入先出(LIFO),棧只有唯一一個可見元素,就是棧頂元素。

棧的實現:棧實際上就是一個表,任何實現表的方法都可以用來實現棧,鏈表和數組都可以。

1.單鏈表實現棧插入和刪除都在鏈表的表頭進行。

2.數組實現棧。這種方法更流行,當將一個元素推入棧中,使topofStack增一然後置array[topofStack]=推入元素。

使用棧的情況:

1,檢查平衡符號;用於java中大括弧的檢查

2,主調常式的局部變數和當前位置

隊列:與棧一樣,隊列也是表,它與棧不同的是,他是FIFO(先入先出)型,就像排隊過安檢一樣。在一端插入,在另一端刪除。隊列的基本操作為入隊,出隊。出隊刪除的是表頭元素。

同樣隊列可以用鏈表和數組實現,對於數組來說,我們需要記錄一下三個值,front,back,currentsize。front表示出隊的位置,出隊後front+1,currensize-1。back表示入隊位置,入隊時另array[back]=入隊元素,並將back+1,currensize+1。但是這種方式很容易導致數組溢出。最好的解決方法是使用循環數組來實現例如:

生活中用到隊列的情況很多,凡是涉及到排隊的情況都可以使用。比如印表機的列印隊列,銀行排號等等。
推薦閱讀:

數據結構-嚴蔚敏版知識結構圖
九章演算法 | Google 面試題:多餘的連接
Google面試題 | 循環字元串裡面的獨立子串
浙江大學-數據結構-堆排序-9.3.2
浙江大學-數據結構-歸併排序-9.4.3

TAG:數據結構 |