電腦中的堆疊又稱為堆疊,它是一種運算受限的線性表,限定僅在表尾進行插入和刪除操作的線性表,這一端被稱為棧頂,相對地,把另一端稱為棧底;向一個棧插入新元素又稱為進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素。
推薦:《程式設計影片》
堆疊(stack)又稱為堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端稱為棧頂,相對地,將另一端稱為棧底。向一個棧插入新元素又稱為進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
基本概念
要搞清楚這個概念,首先要明白」堆疊「原來的意思,如此才能掌握本質。 "棧「者,存放貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到電腦領域裡,就是指資料暫時存放的地方,所以才有進棧、出棧的說法。
首先系統或資料結構堆疊中資料內容的讀取與插入(壓入push和 彈出pop)是兩回事!壓入是增加數據,彈出是刪除數據 ,這些操作只能從棧頂即最低地址作為約束的接口界面入手操作 ,但讀取棧中的數據是隨便的沒有接口約束之說。很多人誤解這個理念從而對棧產生困惑。而係統棧在電腦體系結構中又起到一個跨部件交互的媒介區域的作用即cpu 與內存的交流通道,cpu只從系統給我們自己編寫的應用程序所規定的棧入口線性地讀取執行指令, 用一個形象的字來形容它就是pipeline(管道線、流水線)。 cpu內部交互作用詳見 EU與BIU的概念介紹。
堆疊作為一種資料結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進後出的原則儲存數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀取數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。
堆疊是允許在同一端進行插入和刪除操作的特殊線性表。允許插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為先進後出表。
堆疊可以用來在函數呼叫的時候儲存斷點,做遞歸時要用到堆疊!
以上定義是在經典電腦科學中的解釋。
在電腦系統中,堆疊則是具有上述屬性的動態記憶體區域。程式可以將資料壓入堆疊中,也可以將資料從堆疊頂部彈出。在i386機器中,棧頂由稱為esp的暫存器進行定位。壓棧的操作使得棧頂的位址減少,彈出的操作使得棧頂的位址增加。
堆疊在程式的運作中有著舉足輕重的作用。最重要的是棧保存了一個函數呼叫時所需要的維護訊息,這常常稱之為堆疊幀或活動記錄。堆疊幀一般包含如下幾方面的資訊:
1.函數的回傳位址與參數
2.臨時變數:包括函數的非靜態局部變數以及編譯器自動產生的其他臨時變數。
以上是計算機中的堆疊是啥的詳細內容。更多資訊請關注PHP中文網其他相關文章!