我正在尝试编写一个代码来排序堆栈而不使用额外的空间。它在逻辑上是正确的,但我的输出是完全随机的。有人可以指出我的错误吗?
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);
}
}
答案 0 :(得分:0)
我认为你来自Java背景。您正在传递函数中的值,这些函数将生成堆栈的副本,并且不会更改原始堆栈。您需要通过引用传递值。
void insertatsortstack(int element, stack<int> & s);
void sortstack(stack<int> &s);
(假设您使用的是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();
}
}