簡體   English   中英

按降序對堆棧進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM