promotion image of download ymail app
Promoted
小玉
Lv 4
小玉 asked in 電腦與網際網路程式設計 · 1 decade ago

C語言堆疊問題

若題目為:

使用一個while迴圈來搬移堆疊S1的內容到堆疊S2做完之後,堆疊S1應該是空的

則程式應該為:

stack(Temp)

while (NOT empty (S1))

{

pop (S1, x)

push (Temp, x) // Temp is a temporary stack

}

while (NOT empty (Temp))

{

pop (Temp, x)

push (S2, x)

}

那如果題目變成為:

使用一個while迴圈來複製堆疊S1的內容到堆疊S2做完之後,堆疊S1和S2的內容應該相同

則程式應該為何?

我不知道要如何複製

可否寫出程式碼給我看並加上註解

謝謝!!

3 Answers

Rating
  • 1 decade ago
    Favorite Answer

    stack(Temp1)

    stack(Temp2)

    while (NOT empty (S1))

    {

    pop (S1, x)

    push (Temp1, x) // Temp is a temporary stack

    }

    while (NOT empty (S2))

    {

    pop (S2, x)

    push (Temp2, x) // Temp is a temporary stack

    }

    while (NOT empty (Temp2))

    {

    pop (Temp2, x)

    push (S1, x)

    push (S2, x)

    }

    while (NOT empty (Temp1))

    {

    pop (Temp1, x)

    push (S1, x)

    push (S2, x)

    }

    2009-04-04 12:27:56 補充:

    若連 cout 都還沒學到,是不可能會問類似本題這種問題的!

    這種說法和你所提的程式明顯「不搭調」,

    你所摘錄的程式片段,表明其原來所做的工作,

    現提問若工作情況做某種改變,原程式應如何對應修改。

    這樣的問法,顯示你應對原程式已有相當的理解,才會摘錄片段來提問,適切的回答當然是以你原程式為藍本,針對新情況來修改!

    簡言之,對你提問的動機頗感質疑!

    2009-04-06 01:06:46 補充:

    因為while (NOT empty (S1))會檢測讀取的s1是否已空,s2也一樣,

    所以s1和s2原先是否有東西,都沒關係,都會正確讀取。

    第一個和第二個while是把x從s1和s2拿出來放到temp1和temp2後,

    此時s1 和 s2 皆已被清空。

    第三個while是把temp2中的x放到s1和s2中,

    此時 s1 和 s2都是原先s2的內容。

    第四個while是把temp1中的x放到s1和s2中,

    此時,把原先s1的內容串接加在 s1和s2。

    2009-04-06 01:13:41 補充:

    題目原來的程式在把 s1的內容移至 s2 ,完成後 s1是空的。

    而我貼上的流程,正可滿足你題目的要求:

    「使用一個while迴圈來複製堆疊S1的內容到堆疊S2做完之後,堆疊S1和S2的內容應該相同」

    這題的主旨在測驗流程規劃,不在程式指令細節,可以以「筆試」的方式來測驗。

    2009-04-06 01:15:32 補充:

    因為while (NOT empty (S1))會檢測讀取的s1是否已空,s2也一樣,

    所以s1和s2原先是否有東西,都沒關係,都會正確讀取。

    第一個和第二個while是把x從s1和s2拿出來放到temp1和temp2後,

    此時s1 和 s2 皆已被清空。

    2009-04-06 01:15:40 補充:

    第三個while是把temp2中的x放到s1和s2中,

    此時 s1 和 s2都是原先s2的內容。

    第四個while是把temp1中的x放到s1和s2中,

    此時,把原先s1的內容串接加在 s1和s2。

    2009-04-06 01:19:09 補充:

    這樣的流程,正可滿足你題目的要求:

    「使用一個while迴圈來複製堆疊S1的內容到堆疊S2做完之後,堆疊S1和S2的內容應該相同」

    這題的主旨在測驗流程規劃,不在程式指令細節,可以以「筆試」的方式來測驗。

    2009-04-06 01:29:09 補充:

    有更切合題意的流程,只需一個 temp,如下:

    stack(Temp)

    while (NOT empty (S1))

    {

    pop (S1, x)

    push (Temp, x)

    }

    while (NOT empty (Temp))

    {

    pop (Temp, x)

    push (S2, x)

    }

    2009-04-06 01:29:44 補充:

    while (NOT empty (S2))

    {

    pop (S2, x)

    push (Temp, x)

    }

    while (NOT empty (Temp))

    {

    pop (Temp, x)

    push (S1, x)

    push (S2, x)

    }

    2009-04-06 01:32:15 補充:

    這題並非只有一種流程。

    在補充說明裡提出另一流程,僅需用一個 temp。

    2009-04-06 01:38:04 補充:

    其中第一、第二個while和題目內文原來的一樣,

    添加第三和第四個 while 在原題目的流程之後,

    便已滿足題目要求。

    這個後來補充的解法比較好。

    2009-04-07 01:31:24 補充:

    第二流程

    第一、二個while後,s1移動串接在s2,且s1已清空),

    第三個while 結束時,s2此時和s1一樣都是清空,

    第四個while從temp拿出來的x當然可以同時放到s1和s2。

    • Commenter avatarLogin to reply the answers
  • 小玉
    Lv 4
    1 decade ago

    請問〝充滿信心的人〞大大:

    stack cout<<"S1 : ";

    cout<<<' ';

    cout<<<"S2 : ";

    以上這三行是啥意思?

    我還沒學到cout<<耶

    2009-04-05 23:45:28 補充:

    請問東邪無弓大大~

    第一個和第二個while是把x從s1和s2拿出來放到temp1和temp2

    第三個while是把temp2中的x放到s1和s2中

    第四個while是把temp1中的x放到s1和s2中

    請問程式的流程是這樣嗎?

    那原本的s1和s2裡面有東西嗎?

    第一個和第二個while中s1和s2的x是一樣的還是不一樣的?

    最後結果是s1和s2都擁有兩者原本的東西嗎?

    2009-04-06 20:54:47 補充:

    再請問一下東邢無弓大大~

    以第二個流程來看

    第四個while中

    從temp中拿出來的x可以同時放到s1和s2嗎?

    • Commenter avatarLogin to reply the answers
  • MrAYD
    Lv 5
    1 decade ago

    #include <cstdlib>

    #include <iostream>

    #include <stack>

    using namespace std;

    int main(int argc, char *argv[])

    {

    stack<int> s1,s2;

    for (int i=0;i<5;i++) // Push 5筆資料到 S1

    s1.push(i);

    s2=s1; // 複製 S1到 S2

    cout<<"S1 : ";

    while (!s2.empty())

    {

    cout<<s2.top()<<' ';

    s2.pop();

    }

    cout<<endl<<"S2 : ";

    while (!s1.empty())

    {

    cout<<s1.top()<<' ';

    s1.pop();

    }

    system("PAUSE");

    return EXIT_SUCCESS;

    }

    2009-04-03 20:08:33 補充:

    簡單的範例 參考看看

    2009-04-03 22:49:53 補充:

    cout是C++的標準輸出, 可將文字及變數資料輸出到螢幕

    cout<<"S1 : "; //輸出 S1 :

    Source(s): ME
    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.