2017-10-29 16 views
0

私は問題文を与えられました。問題文は、レストランが顧客の注文を受け取るためのアプリケーションを構築しているとします。選択する配列リストまたはリンクされたリスト

あなたのアプリは注文のリストを保存する必要があります。サーバーはこのリストに 注文を追加し続け、シェフはリストから注文を取り出して作成します。 注文待ち行列です。サーバーは待ち行列の後ろに注文番号 を追加し、シェフは最初の注文を待ち行列から外してそれを調理します。 このキューを実装するには、配列またはリンクリストを使用しますか?

私はリンクリストを返済しました。多くのインサートが行われています(サーバ )。シェフが常に からキューから一番離れているため、 の検索やランダムアクセス(配列は何よりも優れています)は必要ありません。

私の答えは正しかったとアドバイスしてください。また、サーバが10個のアイテムを同時にキューに入れることも考えていましたが、もう一方のシェフが先にアイテムを選ぶことにして、そのような場合は、どのデータ構造が最も良いのですか?

答えて

0

はい、リンクリストが必要です。

これは通常、一方の端から挿入しようとしているだけでなく、もう一方の端から要素を削除しようとしているためです。

このリンクされたリストでは、頭と尾があります。ポインタを常に利用できるようにします(尾から要素を削除し、頭の上に要素を追加する必要があるため)。

頭に向かって注文が追加されると、頭は更新され続けます。ここで問題はありません。

シェフが1つの注文を削除する部分:リストからアイテムを削除し、テールポインタをリストの最後のオブジェクトである2番目の最後のオブジェクトに移動する必要があります。

これを達成するための唯一の方法は、キューから要素を削除(またはポップ)するたびにテールが更新されることです(oops sorry、linked list)。

私は、二重リンクリストを使用してキューを実装する方法を教えていたと思います。

インプレッションhereを参照してください。

EDIT:

あなたにも、単独リンクリストでそれを行うことができます。手順は次のとおりです。

  1. 新しい要素が追加されるたびに、リストの後ろに追加してテールポインタを更新します。
  2. シェフがリンクされたリストから要素を必要とするときはいつでも、ヘッドにアクセスして1つの要素を取り出し、head-> nextにヘッドを更新します。
0

リンクリストベースのキューは、上記の質問に最適なオプションです。リンクされたリストキューでは、挿入(サーバーによる注文)と削除(シェフによる注文)のO(1)操作の利点があります。また、動的メモリ割り当てもあります(必要なときにのみメモリが使い尽くされます)。

私はシェフが一般的に現実世界でやっているのと同じような注文をまとめるために使った同様のプロジェクトに取り組んできました。例:サーバー1からの2フレンチフライ、サーバー2からの3フレンチフライは合計で5フレンチフライ料理になります。

アイテムの準備にかかる時間に基づくランダムアクセスが考慮されているシナリオを実装する場合、リンクされたリストのキューがより有用になると私は考えています。

関連する問題