-
1 # fynuh37931
-
2 # 使用者3128717186299
棧可以用來在函式呼叫的時候儲存斷點,做遞迴時要用到棧!
首先 系統或者資料結構棧中資料內容的讀取 與 (壓入push和 彈出pop) 是兩回事! 插入是增加資料 彈出 是刪除資料 ,這些操作只能從棧頂即最低地址作為約束的介面介面入手操作 ,但讀取棧中的資料 是隨便的 沒有介面約束之說。很多人都誤解這個理念從而對棧產生困惑。[1]而系統棧在計算機體系結構中 又起到一個跨部件互動的媒介區域的作用 即 cpu 與記憶體的交流通道 ,cpu只從系統給我們自己編寫的應用程式所規定的棧入口線性地讀取執行指令, 用一個形象的詞來形容它就是pipeline(管道線、流水線)。cpu內部互動具體參見 EU與BIU的概念介紹。
棧作為一種資料結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
棧可以用來在函式呼叫的時候儲存斷點,做遞迴時要用到棧!
以上定義是在經典計算機科學中的解釋。
在計算機系統中,棧則是一個具有以上屬性的動態記憶體區域。程式可以將資料壓入棧中,也可以將資料從棧頂彈出。在i386機器中,棧頂由稱為esp的暫存器進行定位。壓棧的操作使得棧頂的地址減小,彈出的操作使得棧頂的地址增大。
棧在程式的執行中有著舉足輕重的作用。最重要的是棧儲存了一個函式呼叫時所需要的維護資訊,這常常稱之為堆疊幀或者活動記錄。堆疊幀一般包含如下幾方面的資訊:
1.函式的返回地址和引數
2. 臨時變數:包括函式的非靜態區域性變數以及編譯器自動生成的其他臨時變數。
回覆列表
棧:特點就是一個先進後出的結構。佇列:特點就是一個先進先出的結構。//一般只要你滿足這個特點就可以稱之為棧或佇列。棧的應用:非常廣泛,在CPU內部就有提供棧這個機制。主要用途:函式呼叫和返回,數字轉字元,表示式求值,走迷宮等等。在CPU內部棧主要是用來進行子程式呼叫和返回,中斷時資料儲存和返回。在程式語言中:主要用來進行函式的呼叫和返回。可以說在計算機中,只要資料的儲存滿足先進後出的原理,都優先考慮使用棧,所以棧是計算機中不可缺的機制。佇列的應用:佇列主要用在和時間有關的地方,特別是作業系統中,佇列是實現多工的重要機制。windows中的訊息機制就是透過佇列來實現的。程序排程也是使用佇列來實現,所以佇列也是一個重要的機制。只要滿足資料的先進先出原理就可以使用佇列。