2016-08-30 23 views
0

降順でソートするときに問題があります。ソートは別のスタックの助けを借りて動作します。ここ降順でスタックを並べ替え

はソートコードです:

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

独自のスタックを実装していますか? (スタックを実装する最も一般的な方法である)単一リンクリストを使用する代わりに、二重リンクリストを使用し、頭と尾の両方へのポインタを保持します。次に、 "スタック"を任意の方法で繰り返すことができます。私はそれをもう "適切な"スタックと呼んでいません。 –

+3

これはどんなソートアルゴリズムですか? –

答えて

0

ポインティング値ではなくポインタでソートしています。実際には、この場合は値を指摘していないので、なぜポインターを使用するのかという疑問が生じます。とにかく、これは問題のあるコードです。

push((int*) -45, stack); 

ポインタはほとんど負ではありません。したがって、このキャストによってアンダーフローが発生し、コンパイラによっては大きな正のポインタが生成されます。そのため、このポインターは使用する他のポインターより大きくなります(-4を除く)。

要約:ポインタでソートしないでください(実際に何をしているのか分からない限り)。単純な整数を表すためにポインタを使用しないでください。

+0

別の問題あなたの助けが頭の機能にある前に、私は頭の機能とコードの仕事、thxからポインタを削除しました。 –

+0

この場合(32ビットモードを想定)、ポインタへのキャストは、符号なし整数へのキャストと事実上同じです。したがって、負の整数は2^32値に、-45は4294967251に、-4から4294967292に変更され、2つの最大値になります。 – rcgldr

0

element変数は、タイプint *と宣言されています。それが適切であれば、ポインターを比較していますが、を指している値とを比較したいと思われるようです。

関連する問題