【數據結構】什麼是棧

stack

棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱爲棧頂,相對地,把另一端稱爲棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成爲新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成爲新的棧頂元素。

基本概念

經典名詞解釋:棧是限定僅在表頭進行插入和刪除操作的線性表。要搞清楚這個概念,首先要明白”棧“原來的意思,如此才能把握本質。”棧“者,存儲貨物或供旅客住宿的地方,可引申爲倉庫、中轉站,所以引入到計算機領域裏,就是指數據暫時存儲的地方,所以纔有進棧、出棧的說法。

首先系統或者數據結構棧中數據內容的讀取與插入(壓入push和 彈出pop)是兩回事!插入是增加數據,彈出是刪除數據 ,這些操作只能從棧頂即最低地址作爲約束的接口界面入手操作 ,但讀取棧中的數據是隨便的沒有接口約束之說。很多人都誤解這個理念從而對棧產生困惑。 而系統棧在計算機體系結構中又起到一個跨部件交互的媒介區域的作用 即 cpu 與內存的交流通道 ,cpu只從系統給我們自己編寫的應用程序所規定的棧入口線性地讀取執行指令, 用一個形象的詞來形容它就是pipeline(管道線、流水線)。

棧作爲一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。
棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱爲棧頂(top),另一端爲棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數爲零時稱爲空棧。插入一般稱爲進棧(PUSH),刪除則稱爲退棧(POP)。棧也稱爲後進先出表。

在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱爲esp的寄存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。
棧在程序的運行中有着舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之爲堆棧幀或者活動記錄。堆棧幀一般包含如下幾方面的信息:
1.函數的返回地址和參數
2. 臨時變量:包括函數的非靜態局部變量以及編譯器自動生成的其他臨時變量。

棧的分類

1.順序棧
2.鏈式棧

棧的實現

順序棧

鏈式棧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章