C言語でリストを用いて優先度のついた構造体を用いたプログラムを作りたいと思っています。
簡単に言うと、呼ぶたびに優先度順にリストの先頭にある構造体のデータを取り出す関数とその機構を作成したいと考えています。どうしてもわからなかったので質問させていただきました。
作る機構は、優先度を整数値で1-3まで持っている同じ型の構造体が幾つかあり、その構造体は線形リストになっており、自分の型の構造体のポインタをメンバとして持っています。
それらの構造体の優先度を調べて、その構造体のポインタの型の配列に3段階で振り分けます。このとき、同じ優先度の構造体があったら、構造体を後ろにつなげていきます。
その後、関数を呼ぶと、リストの一番先頭にあるデータを取り出した後、優先度3の構造体を、再び、優先度3のリストの一番後ろに、次に、優先度2の構造体を優先度3のリストの一番後ろに、優先度1の構造体を優先度2のリストの一番後ろにつなげます。優先度1か2の構造体が呼び出された後、もとの優先度のリストの一番後ろに戻ります。
例えば
構造体1優先度3
構造体2優先度2
構造体3優先度1
構造体4優先度1
の4つの構造体があるとしたら、 優先度の配列3つにそれぞれ振り分けて、
優先度の高い構造体の先頭のデータを取り出す関数を呼ぶごとに、
優先度3 1 1 2 2 3 4 1 3 4 1 4 1 2
優先度2 2 -> 3 4 -> -> 2 ->
優先度1 3 4 3
とリストを変更して、最終的に1123412・・・
と、優先度が高い構造体のデータを多くとり出せるような機構を作りたいです。
queueなどを用いて先頭から取り出していきたいのですが、どのようにすれば良いかいまいちわかりません。
なにか良い方法がございましたら、ぜひ教えてください。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/14 07:08