我已经阅读了网站中堆栈排序的答案,但我无法实现我的代码。
void sort(int *stack) {
if(!isempty()) {
int y=pop(stack,&i1);
int max=y;
int j;
while(!isempty) {
int x=pop(stack,&i1);
if(x>y) {
max=x;
push(y,stack1,&i2);
} else
push(x,stack1,&i2);
}
push(max,stack2,&i3);
}
int *temp;
temp=stack1;
stack1=stack;
stack=temp;
sort(stack);
}
我使用&
运算符用于stack
指针,因为我使用了三个堆栈。有人请解释为什么它会变成无限循环? stack
是原始数组,stack 1
是临时数组,stack 3
具有最终排序值。
答案 0 :(得分:0)
首先要检查“x> max”而不是“x> y”。
有许多令人困惑的事情。正如评论中所提到的,有一个变量和一个名为“isempty”的函数。我想这是一个输入错误,它必须是函数“isempty”。
你的功能“排序”无法摆脱它,因为你在函数的最底层调用它。它总是循环回归自己。 (无限递归函数)。所以命令“sort(stack)”必须在while循环中。 (带有所有帮助命令)。
我无法继续前进,因为这个问题更令人困惑。只是尝试制作这些错误并首先编译代码!