대기열에서 어느 쪽이 "헤드"입니까?


18

나는 항상 큐의 "헤드"를 다음에 읽을 요소라고 생각했지만 실제로 그 사용법에 의문을 제기하지 않았습니다. 따라서 큐를 유지 관리하는 데 사용되는 링크 목록 라이브러리는 해당 용어를 체계화했습니다 list1_head. 첫 번째 요소를 검색 하는 매크로 가 있습니다 . 대기열에서이 라이브러리를 사용할 때 이것이 제거 할 첫 번째 요소가됩니다.

그러나 팀의 새로운 개발자는 대기열을 다른 방식으로 구현하는 데 익숙했습니다. 그는 줄을 개처럼 행동한다고 ​​묘사했습니다. 머리에 삽입하고 꼬리에서 제거합니다. 이것은 그의 사용법이 더 널리 퍼져 야한다고 생각하는 영리하고 충분한 설명이며, 내가 선호하는 사용법에 대해 비슷하게 연상적인 설명이 없습니다.

따라서 두 가지 관련 질문이 있습니다. 1, 큐의 "헤드"는 무엇을 의미합니까? 그리고 2, 왜 우리는 그 개념을 설명하기 위해 "머리"라는 단어를 사용합니까?


1
"그는 줄을 개처럼 행동하는 것으로 묘사했다 ..."
NoChance

1
잘 모르겠지만 개가 아닌 구현에서 추측했을 것입니다.
이즈 카타

: QUEUE와 스택의 차이에 대한 또 다른 좋은 설명 http://pages.cs.wisc.edu/~mcw/cs367/lectures/stacks.html
Ythalo Rossy

또한 교과서에서 (단일로) 연결된 목록은 종종 스택 및 대기열과 같은 다른 데이터 구조보다 먼저 도입 된 다음 연결된 목록 구조 위에 구축됩니다 (이러한 이유로 오늘날 이러한 데이터 구조를 구축하는 데 선호되는 방법은 아닙니다) 캐시 누락). 링크 된리스트에는 종종 헤드 포인터 (첫 번째 요소 참조)와 꼬리 포인터 (마지막 포인터)가 있습니다. 이 배열에서는 꼬리 끝을 머리에서 제거하기가 쉽습니다. 따라서 그러한 FIFO 대기열에서는 정면에서 제거합니다. 그러나 이것은 실제로 내부 구현 세부 사항입니다.
Filip Milovanović

BTW는 부분적으로 언어와 관련이 있다고 생각하지만 대기열의 기능을 개념화하는 방법에 관한 것입니다. "대기열"이라는 단어의 의미를 알고 있거나 그 은유로 개념을 도입 한 대부분의 사람들에게 출구 부분은 앞 / 머리에 있습니다. 친구가 파이프 라인의 종류와 같은 개념으로 개념화했다고 생각합니다. 파이프의 한쪽 끝 (또는 시작 부분에서 "머리")에 물체를 밀어 넣고 다른 쪽 끝에서 빠져 나갑니다.
Filip Milovanović

답변:


29

당신은 대기열의 뒷면에 들어가서 정면에서 떠나십시오. 대부분의 사회에서, 그것은 머리가 앞을 의미하고 물건이 머리에서 제거된다는 것을 의미합니다.

대기열에 대한 자바 독은 (원래 하나를 즉) 고전적인 정의에 동의 할 것 같다 :

사용 된 순서가 무엇이든 큐의 헤드는 remove () 또는 poll ()에 대한 호출로 제거되는 요소입니다. FIFO 대기열에서는 모든 새 요소가 대기열의 끝에 삽입됩니다.


4
C ++ STL도 동의합니다.
Fabio Ceconello

FIFO / LIFO의 일반적인 용어는 대기열 / 스택 상단에서 제거하는 것입니다. 강아지의 상단은 꼬리가 아니라 머리입니다. :-D
Spencer Kormos

첫 번째 질문에 답한 것 같습니다. 일반적으로 내가 이해하는 사용법이 전통적 인 경우입니다. 참조 해 주셔서 감사합니다. 그러나 ... 큐의 전면은 "머리"라고 왜 나에게 철 - 클래드로 아니에요
에이단 컬리

... 우리는 개 오리피스에서 어떤 항목을 대기열에 넣습니까? ;)
ell

1
강아지의 꼬리는 줄의 머리입니다.
Caleb

8

우체국에 서있는 것처럼 다른 영어권 국가의 사람들이 줄을 부르는 것처럼 미국 사람들이 일반적으로 전화를 거는 것. 따라서 "대기열"을 "줄"로 바꾸면 미국인들이 용어를 똑바로 유지하는 것이 더 쉽습니다. 다시 말해서, 당신이 줄의 맨 앞 또는 맨 앞에있을 때, 당신은 다음으로 부름을받습니다.


어쩌면 이것은 영어에 대한 더 많은 질문 일 것입니다. 왜 냐고 생각되는 문제는 "우리는 왜 정면을 머리라고 부릅니까?"
Aidan Cully

3
@AidanCully : 신체의 머리가 앞을 향하거나 앞을 향하기 때문에 (사족과 다른 동물의 수평 방향).
outis

그것은 미국인들에게 가능한 최고의 설명입니다.
andDevW

4

두 규칙 모두 공통적으로 사용됩니다. 필자의 경험에 따르면 일반적으로 대기열에 대해 이야기 할 때 헤드 요소는 대기열에서 나올 다음 항목이며 꼬리는 요소가 대기열에 들어가는 곳입니다. 이것은 일상 영어 사용과 일치합니다. 우리는 뒤에서 줄을 서고 다음으로 제공 될 것은 앞면 또는 머리입니다. (그리고 자르면 줄의 뒤쪽에 있습니다!)

그러나 큐 (일명 FIFO)가 링 버퍼 로 구현되는 경우 링 버퍼 의 사용 된 부분이 뱀이 원형으로 돌아가는 것과 유사하기 때문에 일반적으로 용어가 반대가됩니다. 뱀이 앞으로 나아가고 있다고 가정하면, 머리는 당연히 움직임을 이끄는 끝이며 들어오는 항목이 삽입되는 끝이기도합니다.


Linux 커널 에서는 순환 버퍼에 대해 언급 할 가치가 있는데, 이는 아이템이 헤드에 추가되고 테일에서 제거되는 규칙을 사용합니다.
Craig McQueen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.