[英]Sorting a stack in descending order
我在按降序對堆棧進行排序時遇到麻煩,在另一個堆棧的幫助下可以進行排序。
這是排序代碼:
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
謝謝你們
您是根據指針而不是指向的值進行排序。 實際上,在這種情況下,您沒有指向值,這引起了一個問題,為什么根本使用指針。 無論如何,這是有問題的代碼:
push((int*) -45, stack);
指針通常不會是負數。 因此,這種轉換將導致下溢,並且取決於您的編譯器,將導致較大的正指針。 因此,此指針將比您使用的任何其他指針大( -4
除外)。
總結:不要按指針排序(除非您真的知道自己在做什么)。 不要使用指針來表示純整數。
您的element
變量被聲明為int *
類型。 假設是適當的,在您的排序你是比較指針 ,但你似乎要比較它們指向的值,來代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.