入棧出棧的問題,關於入棧,出棧指標和資料操作順序的疑問

2021-03-22 05:48:59 字數 3120 閱讀 4668

1樓:資彤出景

top指向棧頂,也就是最後壓入棧的元素的後乙個空單元,所以入棧的時候需要把元素填到這個單元,再把棧頂++;

同樣,出棧的時候,需要把棧頂先--,才能得到最後入棧的那個元素。

2樓:匿名使用者

把分給他吧 挺詳細的 我就不答了

關於入棧,出棧指標和資料操作順序的疑問

3樓:匿名使用者

樓主,堆疊是乙個抽象資料型別,規定的兩項必備的基本操作分別為入棧和出棧。這個抽象資料型別並沒規定入棧與出棧具體要怎麼實現。你問的問題已經在實現這一層面上,所以按照堆疊這種抽象資料型別的規定看,「先修改指標,然後插入資料,出棧時剛好相反」並不是必須的,這取決於你的操作的具體實現。

如果你的堆疊的實現是往上長的(就是說往頂的方向長,其實質是你的棧底是定死的不能動,入棧的東西只能不斷往上疊,這就像你在書桌上放書一樣,桌底是定死的,所以你的書只能一本一本地往上堆,往上長),計算機內部的堆疊的實現採取的就是這種模式,所以就得像你說的那樣,「先修改指標,然後插入資料,出棧時剛好相反」,因為你堆疊指標指向的總是棧頂元素,棧底不能動,所以資料入棧前要先修改指標使它指向新的空餘空間然後再把資料存進去,出棧的時候自然相反,你聯絡我上面舉的放書的例子仔細想想。

然而,如果你的堆疊的實現是往下長的(就是說你每壓乙個元素入棧,棧底就自動下移乙個元素的位置,其實質就是這種堆疊模型是乙個「無底洞」型),這個時候,你的棧頂就變成了定死的,你就可以先壓入元素,然後再修改指標。因為你的棧底是無限的,你壓入乙個元素,新的元素就取代先前的棧頂元素佔據棧頂的位置,那麼你先前的指向棧頂元素的指標這個時候就該修改讓它指向這個新的棧頂元素了。

下面的就是對「無底洞」型堆疊的一種實現的描述:

壓棧(入棧):將物件或者資料壓入棧中,更新棧頂指標,使其指向最後入棧的物件或資料。

彈棧(出棧):返回棧頂指向的物件或資料,並從棧中刪除該物件或資料,更新棧頂。

話說回來,計算機內部肯定選第一種模型,不會選第二種,因為第二種模型,每壓入乙個新的元素,都需要把之前堆疊裡的所有元素整體下移動乙個元素的位置,騰出棧頂元素的位置讓新的元素進來,這種平移可是一筆不小的開銷啊!但是並不是說「無底洞」模型就沒辦法實現了,其實它可以通過第一種模型來模擬的,每需要壓入乙個新的元素的時候,就先開闢乙個空間,資料存入這個空間,然後再修改棧頂元素指標使其指向這個新的棧頂元素。

換句話說,用鍊錶的話,只要有足夠的空間可開闢出來作為乙個節點,那麼兩種堆疊模型都能實現(當然「無底洞」型還是如我上面說的那樣用第一種模擬出來的,否則平移的工作量相當可觀),如果用陣列,由於陣列在記憶體中是連續分配出來的空間,用第一種模型更自然一些。

4樓:匿名使用者

出入堆疊和裝貨一樣的道理,怎麼說呢?你仔細想想就明白了

5樓:匿名使用者

形象的說, 棧 就是乙個上面有標籤欄的桶. 標籤欄(類似超女投票的那種)就代表指標.桶底就是棧底.

桶頂就是棧頂. 拿乙個東西準備放入桶,先要往裡面扔乙個標籤(指標定位).然後在把東西(資料)放進桶裡.

可以想象一下.後放進去的東西總是壓在前乙個東西的上面.要拿的話也是先拿最後乙個.

6樓:匿名使用者

打個比方:假如你是房東,有人要住你的房子,那他住進來前你肯定要先把房子騰空,然後讓他住進來;反之,如果你不租給他住了,肯定是要先把房客趕出去,然後再使用空出來的房子。

道理是一樣的,你把堆疊看成是房子,資料看成是房客,就會懂了。

7樓:匿名使用者

堆疊主要用於儲存臨時資料、本地變數和中斷、子程式呼叫產生後的返回位址。堆疊指標暫存器通常指向堆疊的頂部。注意堆疊的執行是從較高的儲存器位址到較低的儲存器位址。

也就是說,一條堆疊push命令會使堆疊指標減小堆疊指標指向資料sram堆疊區域中子程式和中斷堆疊被定位的位置。在任何子程式被呼叫或中斷被使能之前,位於資料sram中的這一堆疊空間必須由程式定義好。堆疊指標必須被設在0x60之上。

當使用push指令向堆疊中壓入乙個資料時,堆疊指標自動減1;而當返回位址被子程式呼叫或中斷壓入堆疊時,堆疊指標自動減2。當使用pop指令把乙個資料從堆疊中彈出時,堆疊指標自動加1;而由子程式的ret或中斷程式的reti彈出資料時,堆疊指標自動加2。

希望對你有幫助!

8樓:匿名使用者

先進後出啊

就像一次只能過乙個人的橋,先過去的肯定是最後乙個回來。

9樓:匿名使用者

2樓說的經典,就是這樣的!

10樓:匿名使用者

其實沒那麼神秘 主要是看你自己定義棧的時候是怎麼樣的有的把初始top=-1 當然是要先加再入咯 或者的top=0時候可以入再加 也可以先加再入 還有乙個問題是看你的棧頂是不是作為空的來處理

比如有些設計的時候棧頂就是空的沒有儲存資料 有的是有儲存資料的最後一點是出棧和入棧操作的對稱的前面是++top的話 後面就的top--

反之亦然

資料結構課程棧出棧入棧問題

11樓:阿冬

題目中沒有給出push、pop兩個函式的實現**,猜測出題者的本意,應該是入棧和出棧過程中版順便給對應權變數賦值,據此,答案如下:

最初x='c', y='k'

push(s,x); //c入棧,棧中只有c

push(s,'a'); //a入棧,棧中有c、a

push(s,y); //k入棧,棧中有c、a、k

pop(s,x); //k出棧,並賦值給x,此時x=k,棧中有c、a

push(s,'t'); //t入棧,棧中有c、a、t

push(s,x); //x入棧,即k入棧,棧中有c、a、t、k

pop(s,x); //x出棧,即k出棧,此時x=k,棧中有c、a、t

push(s,'s'); //s入棧,棧中有c、a、t、s

接下來通過迴圈做出棧動作,每次迴圈把棧頂的資料送給y,並列印,故依次列印s、t、a、c,

最後再列印x,x的值是k

c語言棧的問題 壓棧 入棧 出棧 壓棧和出棧是一樣的麼? 出站時只能出出乙個元素嗎

12樓:匿名使用者

嗯,都是乙個乙個進乙個乙個出。先進後出。

進去越早出來越晚

彙編出棧入棧的順序問題,組合語言中入棧出棧問題

入棧的順序是 push ax push si出棧時 pop si pop ax 組合語言中入棧出棧問題 20 我們申請乙個空棧,然後把ax,b.你是怎麼申請的呀?你既然,申請了乙個空棧,你就應該知道,棧底,在什麼地方。也就知道,棧底,的位址,存在什麼地方。那麼你說說看,你把棧底的位址,存在什麼地方了...

關於入棧,出棧指標和資料操作順序的疑問

樓主,堆疊是乙個抽象資料型別,規定的兩項必備的基本操作分別為入棧和出棧。這個抽象資料型別並沒規定入棧與出棧具體要怎麼實現。你問的問題已經在實現這一層面上,所以按照堆疊這種抽象資料型別的規定看,先修改指標,然後插入資料,出棧時剛好相反 並不是必須的,這取決於你的操作的具體實現。如果你的堆疊的實現是往上...

關於組合語言問題入棧出棧什麼用,組合語言中入棧出棧問題

組合語言中堆疊的操作有專門的語句指令。入棧指令是 push 出棧指令是 pop 比如 mov a,30h 將乙個壓縮bcd碼送累加器apush acc 壓棧保護 anl a,0fh 保留低四位 mov 30h,a 回送給30h pop acc 出棧 swap a 高低四位互換 anl a,0fh 保...