キューでは、「ヘッド」はどちらの端ですか?


18

私はいつも、キューの「ヘッド」を次に読む要素として考えていましたが、実際にその使用法に疑問を持つことはありませんでした。したがって、私が書いたリンクリストライブラリは、キューの維持に使用され、その用語を成文化しましたlist1_head。最初の要素を取得するマクロがあります。このライブラリをキューで使用する場合、これが削除される最初の要素になります。

しかし、チームの新しい開発者は、キューを別の方法で実装することに慣れていました。彼はキューを犬のように振る舞うと説明しました。頭で挿入し、尾で削除します。これは非常に賢い説明であり、彼の使用法はもっと普及しているに違いないと思うので、私の好みの使用法についての同様の刺激的な説明はありません。

したがって、2つの関連する質問があると思います。1、キューの「ヘッド」とはどういう意味ですか?2、なぜ「ヘッド」という言葉を使用してその概念を説明するのですか?


1
「彼はキューを犬のように振る舞うと説明した」...一緒に働くのが楽しい男のように聞こえる-彼を顧客の近くに置いてはいけない。
-NoChance

1
わかりませんが、犬の実装ではなく、実装を推測したでしょう。
イズカタ

QUEUEとSTACKの違いに関する別の良い説明:http
//pages.cs.wisc.edu/~mcw/cs367/lectures/stacks.html

また、教科書では、(単一の)リンクリストは、スタックやキューなどの他のデータ構造の前に導入されることが多く、その後、リンクリスト構造の上に構築されます(今日これらのデータ構造を構築するのに必ずしも好ましい方法ではありませんキャッシュミスの)。リンクされたリストには、多くの場合、先頭ポインター(最初の要素を参照)と末尾ポインター(最後へ)があります。この配置では、末尾から挿入してヘッドから削除するのは簡単です。したがって、このようなFIFOキューでは、フロントから削除します。ただし、これは実際には内部実装の詳細であることに注意してください。
フィリップミロヴァーノヴィッチ

ところで、それは部分的に言語関連のものだと思いますが、それはまた、キューが何をするかを概念化する方法についてでもあります。「キュー」という言葉の意味を知っている、またはその比phorで概念を紹介している(並んでいる)ほとんどの人にとって、出口部分は前/頭にあります。あなたの友人は、パイプラインのようなもののようにそれを概念化し、パイプの一端(ある意味では「ヘッド」)でオブジェクトをプッシュし、他端で終了するのではないかと思います。
フィリップミロヴァーノヴィッチ

回答:


29

キューの後ろから入り、正面から出ます。ほとんどの社会では、頭が前であることを意味し、頭からアイテムが取り除かれます。

QueueJavadocは、古典的な定義(つまり、元の定義)と一致しているようです:

使用される順序に関係なく、キューの先頭はremove()またはpoll()の呼び出しによって削除される要素です。FIFOキューでは、すべての新しい要素がキューの末尾に挿入されます。


4
C ++ STLも同意します。
ファビオセコネロ

また、FIFO / LIFOの一般的な用語は、キュー/スタックの先頭から削除することです。犬の頭は尾ではなく頭です。:-D
スペンサーKormos

あなたは最初の質問に答えたようです、それは実際に私が理解していた使用法が伝統的であるという事実です...参照をありがとうございます。しかし、それは...キューの先頭には「ヘッド」と呼ばれる理由私には鉄壁のようではありません
エイダンカリー

...では、犬のどの開口部でアイテムをキューに入れますか?;)
エル

1
犬のしっぽがキューの先頭です。
カレブ

8

米国の人々が一般に電話をかけるのは、郵便局に立つもののように、他の英語圏の国の人々はキューを呼び出します。そのため、「キュー」の代わりに「ライン」を使用すると、アメリカ人にとって用語を簡単に保つことが容易になります。言い換えれば、あなたがラインの先頭、または前にいるとき、あなたは次に呼び出されます。


たぶん、これは英語についてのより多くの質問かもしれません。なぜなら、出てきたと思われる問題は「なぜ前部を頭と呼ぶのか?」
エイダンカリー

3
@AidanCully:体の頭は(四足動物や他の動物の横向き)前向き、または正面にあるためです。
-outis

それがアメリカ人にとって可能な限り最高の説明です。
-andDevW

4

両方の規則が一般的に使用されています。私の経験では、一般的にキューについて話すとき、ヘッド要素はキューから次に出るものであり、テールは要素がキューに入る場所です。これは、日常の英語の使用法と一貫しています。つまり、後ろに並んで、次にサービスを提供するのは前部、つまり頭です。(そして、あなたがカットした場合、それはあなたのための行の後ろにあります!)

ただし、キュー(別名FIFO)がリングバッファとして実装されている場合、リングバッファの使用部分が円を描く蛇に似ているため、通常用語は逆になります。ヘビが前方に移動していると仮定すると、頭は自然に動きを導く端であり、これは入ってくるアイテムが挿入される端でもあります。


Linuxカーネルの循環バッファーについて言及する価値があります。これは、項目が先頭で追加され、末尾で削除されるという規則を使用しています。
クレイグマックイーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.