제 "모국어"는 Java이고 교육적 목적으로 C로 프로젝트를 작성해야합니다. queue.h
라이브러리를 이해하려고합니다. Java에서 기본적으로 add()
은 List
의 끝에있는 항목이지만 queue.h
에는 다른 구성원을 허용하지 않는 매크로가 LIST_INSERT_HEAD
뿐입니다. 실제로, 작은 테스트는 HEAD에 삽입 함을 보여줍니다 (LIST_FOREACH
을 통과하면 마지막으로 삽입 된 요소에서 처음으로 이동 함). 그래서, 이것은 FILO 큐 (스택을 의미)라고해야합니까?왜 BSD queue.h LIST가리스트를 호출 했습니까?
0
A
답변
1
목록이 List ADT에 해당하고, 찾고, 사람 아니다 동일한 값이 두 번 이상 나타날 수있는 순서의 값의 순서 ".
queue.h의 LIST는 구현 세부 정보 (이중 연결 목록으로 구현 됨)를 볼 수있는 List ADT이기도합니다. 매우 LIFO입니다. 아주 queue.h 파일에 나와 있듯이 (꽤 murkily). 그리고 예, Stack ADT을 구현하는 한 가지 방법은 using a linked list입니다.
1
다른 사람을 놓친 것이므로 INSERT_TAIL이 (가) 있어야합니다. 친절하게 찾아서 확인하십시오. "는 :
는 그것은 기능, 목록 및 큐 :
은 아래 수 있음을 모두가, 어쨌든 자바 http://bxr.su/o/queue.h
0
queue.h
에서 제공하는 많은 대기열 옵션이 있습니다. 이 이후
src/sys/sys/queue.h
이므로주의, 사전 프로세서에 의해 수행되고, 각 변형은 매우 최적화되어 있습니다 효율성과 최저 메모리 풋 프린트를 위해.
- http://bxr.su/o/queue.h#SLIST_HEAD
- http://bxr.su/o/queue.h#LIST_HEAD
- http://bxr.su/o/queue.h#SIMPLEQ_HEAD : 오픈 BSD에
- http://bxr.su/o/queue.h#XSIMPLEQ_HEAD *
- http://bxr.su/o/queue.h#TAILQ_HEAD
- http://bxr.su/o/queue.h#CIRCLEQ_HEAD *이 * 중 이유로
, 그것은 큐가 선택할 수있는 선택의 부부가 나타납니다 (각 BSD 시스템은 여기에 약간 다른 선택이있을 수 있습니다)
, 현재 단지 4 6 개 선택 중 공식적으로 manual page에 설명되어 나타납니다. 참조 : http://bxr.su/o/share/man/man3/queue.3
대기열 /리스트에 INSERT_TAIL
할 수 있도록하려면, 당신은 아직도 여기에서 선택할 수있는 옵션을 많이 가지고 - SIMPLEQ
, XSIMPLEQ
, TAILQ
및 CIRCLEQ
을.
그래서, 요약에 : 이름 LIST
에 의해 큐 /리스트의 구현이 꼬리 삽입을 허용하는 것을 말한다에는 법이 없다!
'INSERT_TAIL'을 (를) 가지고있는'TAILQ' 매크로가 있습니다. 그러나 List에는 그러한 메소드가 없으므로 나에게는 이상한 것이 있습니다. –
네, 그 디자인 선택, 꼬리에 추가하기 위해, 당신은 TAILQ를 사용해야합니다, 그렇지 않으면리스트는 괜찮습니다. Java LinkedList와 혼동하지 마십시오. – Karthikeyan