我在按降序排序堆栈时遇到问题,排序在另一个堆栈的帮助下工作。
这是排序代码:
void* sort(stack_type* stack, stack_type* auxiliary) {
int* element = NULL;
while(!is_empty(stack)) {
element = pop(stack);
while(!is_empty(auxiliary) && head(auxiliary) > element) {
push(pop(auxiliary), stack);
}
push(element, auxiliary);
}
}
因此输出:
| -4 |
| -45 |
| 356 |
| 87 |
| 76 |
| 54 |
| 34 |
| 22 |
| 8 |
| 2 |
但我想要:
| 356 |
| 87 |
| 76 |
| 54 |
| 34 |
| 22 |
| 8 |
| 2 |
| -4 |
| -45 |
这里是完整代码的要点:https://gist.github.com/avoxy/380e96a87cb3c6cc1f4a62c02fb6428d
thx guys
答案 0 :(得分:0)
您按指针排序,而不是通过指向的值排序。事实上,在这种情况下,你没有指向值,这就产生了为什么要使用指针的问题。无论如何,这是一段有问题的代码:
push((int*) -45, stack);
指针大多不是负面的。因此,此转换将导致下溢,并且根据您的编译器,将导致大的正指针。因此,此指针将大于您使用的任何其他指针(-4
除外)。
总结:不要按指针排序(除非你真的知道你在做什么)。不要使用指针来表示普通整数。
答案 1 :(得分:0)
您的element
变量被声明为int *
类型。假设这是合适的,在您的排序中,您正在比较指针,但您似乎想要将它们指向的值与进行比较。