2016-03-20 31 views
0

優先度キュー用にこのプログラムを作成しましたが、問題が発生しています。私は間違った出力を得ています。ここでcリンクリストの優先度キュー

は、入力された:

Insert 10000 2 
Insert 10000 2 
Insert 10000 3 
Insert 19444 9 
Pop 
Insert 10331 3 
Pop 
Pop 
Pop 
Pop 
Pop 
ここ

は出力がどうあるべきかです:解決しよう

19444 
10000 
10000 
10000 
10331 
-1 

19444 
10000 
10331 
10000 
10000 
-1 

ここで私が手出力です!

+0

は、あなたが期待している何の行動についての多くの、より具体的にする必要があります。あなたはそれをキューと呼びますが、(特に "Pop"を使用し、stacktopPopというグローバル(?)を持つためにスタックのセマンティクスが必要なようです。 – Tibrogargan

+0

ユーザがInsert num priority(たとえばInsert 10000 3)を入力すると、優先度3のキューに配置されます。Popが入力され、ユーザがenterを押すと、削除される項目がキューから出力され、削除されます。 – idanyal

+0

キューが空ではない(else句)がキューにあるものよりも優先度の高いアイテムが挿入されている場合は、stacktopPopを更新しません。この場合、挿入されたアイテムは新しいstacktopPopでなければなりません。 –

答えて

0

私はあなたの優先順位チェックロジックが間違っていると信じて:まだ

while (queue->next != NULL && queue->next->prior >= /* not <= */ priorty) 

またはより良い

while (queue->next != NULL && priorty <= queue->next->prior) 

ないあなたは二つの要素が同じ優先順位を持っているケースを扱うつもりかどうかはわかりますが、あなた以来insertは "より大きい"を使用してキューの先頭を置き換えて、おそらく同じロジックを維持したいと思うでしょう。ノードを挿入するための

+0

何がすべきか? – idanyal

+0

これは答えです:)。 '<' not '<=' – Tibrogargan

+0

まだ同じ問題が発生しています:/ – idanyal

0

あなたのループが間違っている、それは読んでください:

while (queue->next != NULL && queue->next->prior >= priorty) 
    queue = queue->next; 
関連する問題