1樓:
++ 和-- , 這種操作符! 放在變數的前面為:如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[--s->top]
同樣每為兩步執行:
s->top=s->top - 1;
s->elem[s->top]
**上看:s->top 是指向一個可用(空)的資料區!
在進棧時:
s->elem[s->top++] = 值
將值存入s->elem[s->top];原先指向的一個可用(空)的資料區.
再將值存入這個資料區!
之後執行:s->top=s->top+1; 又向前指向一個可用(空)的資料區.
出棧:值 = s->elem[--s->top]
先s->top=s->top - 1; 指向一個存用資料的資料區.(後退一位)
再取值值 = s->elem[s->top];
這樣 s->top 又是指向這個資料區,而這個資料區的資料已被取出!
所以s->top 是指向一個可用(空)的資料區!而這個資料區註定會被進棧操作的新資料覆蓋!
2樓:匿名使用者
堆疊棧頂指標指向堆疊中最後一個元素的後一個,進棧時,先將元素存入,堆頂指標向後移動一個,出棧相反,堆頂指標先向前移一個,再將元素讀出。所以要用--s->top先改變棧頂指標,再讀數。
3樓:匿名使用者
hszhsh說得不錯,要搞清楚這個問題,必須知道以下三點:
1、由這兩句**可以看出,這是c或c++的**,那麼,陣列的下標是從0開始的;
2、棧的棧頂指標指向最後進棧元素的下一個空間,即:空棧的棧頂指標指向下標為0的空間,含n個元素的棧的棧頂指標指向下標為n的空間。
3、++,--的字首形式和字尾形式的區別。字首形式是先作加減再取變數值,字尾形式是先取變數值,再做加減。
4樓:
看來你的c沒有搞好。--s->top,其實s->top先進行,再--,即使它在左邊。要不理解可這樣看--(s->top)。
在正常情況下s->top指向棧即將寫入的空間,s->elem[s->top++] 理解成在s->elem[s->top]處寫入,再s->top++;使這再指向後面的空位置(可寫位置)。
出棧的時候, s->top是指向棧後面的空位置,必須先向前一位s->top減1,再對s->elem[s->top]操作。但是由於減1在前,所以合在一起就是s->elem[--s->top]
5樓:奕德雪衣
棧——資料結構的一種
但本質是記憶體裡的一塊空間
(有可能連續
也有可能不連續)
只是在其上新增了一些限制:
1.只能在連結串列的一端存取;
2.這樣一來就會造成:先進的後出,後進的先出;
但是:棧分為
滿遞增滿遞減
空遞增空遞減
4種區別就在於
棧頂指標指向最後一個元素還是
最後一個元素的後一個地址空間
還有移動的方向
大概就這些
呵呵!!!!!!!!!!!!!!
資料結構 入棧時是先改指標還是先放元素,出棧時是先移指標還是先取元素 5
6樓:匿名使用者
我覺得這個要看抄
你設定的top指標襲是指向棧bai頂du
元素,還是棧頂元
素的下一個位置。zhi
如果top指向棧dao頂元素,那麼入棧時應該先修改指標再放元素;
如果top指向棧頂元素的下一個位置,那麼入棧時應該先放元素再修改指標。
7樓:亮_靜
入棧時先放元素在該指標,出棧時先取元素後移指標。
8樓:匿名使用者
push()
pop()
所以入棧是先放元素在改指標,出棧先改指標在去元素
9樓:匿名使用者
1、進復棧(push)演算法
①若top≥n時,則給製出溢位資訊,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢位;不滿則作②);
②置top=top+1(棧指標加1,指向進棧地址);
③s(top)=x,結束(x為新進棧的元素);
2、退棧(pop)演算法
①若top≤0,則給出下溢資訊,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②);
②x=s(sop),(退棧後的元素賦給x);
③top=top-1,結束(棧指標減1,指向棧頂)。
資料結構出棧進棧問題
10樓:本末終始
1.cbda可以操作,baidbca不可以。
2.cbda入出棧:du
push a-->push b-->push c-->pop c-->pop b-->push d-->pop d-->push a
3.dbca不可以,原因如下zhi:
第一個出dao棧的是d,意味著a,b,c均在棧版中,其出權棧順序只能是:d->c->b->a
棧和佇列資料結構的特點,什麼情況下用到棧,什麼情況下用到佇列
棧和佇列資料結構的特點是 棧特點就是一個先進後出的結構內。佇列特點就是一個先進先出的結構。棧和佇列的區別是 資料結構不同佇列先進先出,棧先進後出。對插入和刪除操作的 限定 棧是限定只能在表的一端進行插入和刪除操作的線性表。佇列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。遍歷資料速度不...
CALL指令中關於IP進棧的問題
在執行call指令時,ip的值先變成call指令後的第一個位元組的偏移地址,然後才被壓入棧。這種說法是正確的。遠呼叫call far是先壓入cs,然後再壓入ip近呼叫call只壓入ip 樓上的同學錯了,他說的是呼叫中斷的情況,call不儲存標誌暫存器的。call指令步驟 你的例程為call far ...
C語言的壓棧和入棧出棧什麼意思啊誰有什麼好方法理解一
棧的特點是先進後出。你把棧當成一個水桶,把書一本本放進去,然後最先放的書就被壓在最下面,所以最先進去的,最後出來。壓棧就是入棧就是把書放進水桶,出棧就是把書拿出來。壓棧 和 出棧 是什麼意思啊 可以理解成機槍的彈夾,彈夾就是一個棧,子彈一顆一顆壓進去,就是壓棧,有個順序特點就是先進後出,後進先出,出...