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

2021-07-04 07:43:30 字數 2706 閱讀 7720

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

資料結構關於棧top指標位置問題

1 空棧的時候top base 1,就是棧外了。2 入棧的時候先top 然後將元素push入棧,所以 非空棧中的棧頂指標始終在棧頂元素的下一個位置 是正確的,但更應該理解為將要入棧位置的前一個位置 目前的棧頂元素位置 3 棧空判斷top 1,這樣的判斷沒見過。有也應該是 top base 1 或者t...

c語言資料結構中鏈棧的問題,C語言資料結構中鏈棧的問題

這個鏈棧應該bai就是一個du 用連結串列弄的後進先出的 zhi棧結構dao。top指標永遠指向棧的最上面的回那個節點。這個函式是新加一個節點到這個棧中,首先分配了空間給s,s是要新加入這個棧的那個節點。s next top 就是讓s指向棧的最上面的那個元素。top s 因為現在最上面的節點是s了,...

c語言資料結構高手請進,關於順序棧的基本操作問題

1.想通過呼叫函式改變某個變數的值,必須傳遞這個變數的地址。也就是在initstack中申請的記憶體並沒有賦給main中的s變數,會導致後面的訪問出錯。改為引用就可以了 void initstack sqstack s 初始化棧2.在 pop s,e 這個e並沒有記憶體,導致 e s data s ...