sdu_2017_XY 2018-12-06 03:32 采纳率: 0%
浏览 1073
已采纳

C++中关于堆栈操作的问题

这是我在做将堆栈升序排序的时候遇到的问题,请教一下为什么第二个Print()函数不输出结果。

#include <iostream>
#include <stack>
using namespace std;
void StackSort(stack<int>& s){
    if(s.empty()||s.size()==1)
        return;
    stack<int> tmpStack;
    int first=s.top();
    tmpStack.push(first);
    s.pop();
    while(!s.empty()){
        int top=s.top();
        s.pop();

        while(!tmpStack.empty()&&top>tmpStack.top()){
            int tmp=tmpStack.top();
            tmpStack.pop();
            s.push(tmp);
        }
        tmpStack.push(top);
    }
    while(!tmpStack.empty()){
        int tmpFirst=tmpStack.top();
        tmpStack.pop();
        s.push(tmpFirst);
    }
}
void Print(stack<int>& s){
    while(!s.empty()){
        cout<<s.top();
        s.pop();
    }
}
int main(int argc, char** argv) {
    stack<int> s;
    s.push(5);
    s.push(8);
    s.push(6);
    s.push(2);
    s.push(3);
    Print(s);
    StackSort(s);
    Print(s);
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 白色一大坨 2018-12-06 05:52
    关注

    打印时候不应该用引用,而且建议结尾加个换行,这样更好看一些:

    #include <iostream>
    #include <stack>
    using namespace std;
    void StackSort(stack<int>& s){
        if (s.empty() || s.size() == 1)
            return;
        stack<int> tmpStack;
        int first = s.top();
        tmpStack.push(first);
        s.pop();
        while (!s.empty()){
            int top = s.top();
            s.pop();
    
            while (!tmpStack.empty() && top > tmpStack.top()){
                int tmp = tmpStack.top();
                tmpStack.pop();
                s.push(tmp);
            }
            tmpStack.push(top);
        }
        while (!tmpStack.empty()){
            int tmpFirst = tmpStack.top();
            tmpStack.pop();
            s.push(tmpFirst);
        }
    }
    void Print(stack<int> s){
        while (!s.empty()){
            cout << s.top();
            s.pop();
        }
        cout << endl;
    }
    int main(int argc, char** argv) {
        stack<int> s;
        s.push(5);
        s.push(8);
        s.push(6);
        s.push(2);
        s.push(3);
        Print(s);
        StackSort(s);
        Print(s);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退