使用递归对堆栈进行排序,而不使用额外的空间

时间:2018-05-30 05:13:29

标签: recursion data-structures stack

我正在尝试编写一个代码来排序堆栈而不使用额外的空间。它在逻辑上是正确的,但我的输出是完全随机的。有人可以指出我的错误吗?

void insertatsortstack(int element, stack<int> s){

    if(s.empty()==1 || element > s.top())
    {
        s.push(element);
        return;
    }

    int temp=s.top();
    s.pop();
    insertatsortstack(element,s);
    s.push(temp);
}

void sortstack(stack<int> s){
    if(s.size()>0){
        int element=s.top();
        s.pop();
        sortstack(s);
        insertatsortstack(element,s);
    }
}

2 个答案:

答案 0 :(得分:0)

我认为你来自Java背景。您正在传递函数中的值,这些函数将生成堆栈的副本,​​并且不会更改原始堆栈。您需要通过引用传递值。

void insertatsortstack(int element, stack<int> & s);
void sortstack(stack<int> &s);

Working Code Implementation

(假设您使用的是std :: stack)

答案 1 :(得分:-1)

#include 使用命名空间标准;

无效 insertatsortstack (int 元素, stack < int >&s) {

if (s.empty() == 1 || element > s.top())

{
  

s.push(元素);

返回;

}

int temp = s.top();

s.pop();

insertatsortstack(element, s);

s.push (temp);

}

无效

sortstack (stack < int >&s) {

if (s.size() > 0) {

int element = s.top();

s.pop();

sortstack(s);

insertatsortstack(element, s);

}

}

内部

主() {

stack < int >s;

s.push(5);

s.push(1);

s.push(4);

s.push(3);

s.push(6);

s.push(9);

s.push(2);

s.push(3);

s.push(8);

sortstack(s);

while (s.empty() == false) {

cout << s.top() << " ";

s.pop();

}

}