簡體   English   中英

如何使用堆棧反轉雙端隊列?

[英]How to reverse a Deque using stack?

這是我的代碼:-

stack <int> intStack;

    while (!adaqueue.empty())
    {
        intStack.push(adaqueue.front());
        adaqueue.pop_front();
    }
    while (!intStack.empty())
    {
        adaqueue.push_front(intStack.top());
        intStack.pop();
    }

它沒有給出正確的輸出。 比如說,12 和 45 分別是雙端隊列中的項目。 如果我使用上面的代碼來反轉雙端隊列,它會給出錯誤的輸出。 如果我嘗試打印前面的項目,它會給我 12 而不是 45。我的代碼的潛在錯誤是什么? NB C++ 語言的代碼。

您在這里要做的是,在第二個 while 循環中,您要從堆棧中刪除頂部,然后將其添加到隊列的后面。 這樣你就可以顛倒順序。 試着在紙上勾勒出來。 這將有助於形象化它。

隊列初始狀態(1為前):

{1,2,3,4,5}

將其添加到堆棧后(5 是頂部):

{5,4,3,2,1}

然后在從棧頂取出並添加到隊列的后面后,我們保持相同的順序(5):

S {5,4,3,2,1}
Q {}

S {4,3,2,1}
Q {5}

S {3,2,1}
Q {5,4}

S {2,1}
Q {5,4,3}

等等。 最后我們顛倒了隊列:

S {}
Q {5,4,3,2,1}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM