關於用c語言寫的入棧和出棧程式,棧操作的問題

2021-03-04 06:11:23 字數 1094 閱讀 3542

1樓:azure皓哥

嗯,是你這樣理解,書上錯了

2樓:匿名使用者

78,79行應改成top=top->next;free(p1);

c語言 進棧和出棧:

3樓:匿名使用者

閒得沒事幹,跟你詳細講講吧。

首先要弄明白一點,棧的結構是「先進後出「的,就像你堆積木一樣,第一根放在最底層的地面上,然後一根一根往上堆。前乙個放上去的總是被後乙個放上去的壓在底下。那我當我再想裡面放一根的時候,總不能放中間或者放底下吧(除非你很無聊 很寂寞 閒的蛋疼了 先一根根把堆在上面的全部拿出來 然後把要放進去的那根放上去 最後又把剛才搬下來的有重新搬上去......

此處省去幾萬字)所以要往上面加東西的時候,就得放在最上面。

以上就是進棧的原理,怎麼出棧呢,很簡單,直接從」積木"的最頂端取下來就行了。

ok,以上比喻完了,希望你能看得明白。接下來講程式不說積木了:),由上面的分析 我們可以知道乙個道理,對於棧的操作,棧頂的元素很重要(也就是積木最上面的那根)。

為什麼呢。無論是出棧還是進棧,都跟那哥們有直接的聯絡。你想啊,如果要是有元素要進棧的話,那麼它就不能當「老頂」了,那老頂之位就要交給壓在它上頭那位了;如果出棧呢,它也不能當老頂了,老頂之位就要交到原來壓在它底下的那個。

ok,所以一般的棧都將棧頂的那個元素所在的位置(記憶體位址--陣列型別的,或者指標---節點型別的)視為棧的棧頂~!通過它來對棧進出進行操作。

一般來說(或者在我出生以來看到過的)棧有兩種記憶體結構(注意是是記憶體結構,有的書說是儲存結構,都一樣一樣滴),一種是連續的,一種是不連續的,連續的基本上就是陣列了,不連續的基本上就是連結串列型別的啦。你上面的程式就是連結串列型別的,每個節點都有個指標指向它「底下」的節點(我覺得「底下」比下乙個更容易理解)。通過這種你鏈我 我鏈它的方式,把一組資料連在一起。

進棧:int push(stack *s,int e)//進棧

4樓:匿名使用者

棧使用連結串列來實現的.如果你不懂的連結串列,可以先了解一下連結串列.

int push(stack *s,int e)//進棧

出棧是一樣的.

c語言中堆和棧的區別?詳細解答,淺析C語言中堆和棧的區別

棧是先入後出 後入先出的儲存區域,對作業系統來說管理比較簡單,只需要記版錄棧底和當前棧 權頂的位置即可,一般用於保護現場。比如呼叫函式時,呼叫點pc位址被壓入堆疊 函式引數被壓入棧,在函式呼叫結束時會被彈出堆疊指令丟棄或被返回語句利用。堆是提供給當前程式執行時刻開設緩衝區 如使用malloc函式 n...

關於資料結構進棧和出棧的問題望賜教(就剩20分了,您別嫌少)

和 這種操作符!放在變數的前面為 如i 1 等式 i 2 4 是先計算這個值,再執行等式的!而 i 2 3 是先計算等式,之後再計算i的值,等式計算後i的值才是 2 進棧 s elem s top 程式內部會這樣分為兩步執行 s elem s top s top s top 1 出棧 s elem ...

c語言關於陣列中0和的儲存問題,C語言關於陣列中0和 0 的儲存問題

只能佔用4 個 第五個要留給 0 a 4 0 和 a 4 0 這倆一樣 0 ascii 碼 0 a 4 0 這樣的 0才是ascii碼48 不要被那些人誤導 首先乙個字串的話末尾是必須要有 0的 否則會越界,這樣的後果就是程式會有bug,如果你的陣列有5個空間的話,最後乙個一定要留給 0至於a 4 ...