2013-07-17 8 views
0

제 "모국어"는 Java이고 교육적 목적으로 C로 프로젝트를 작성해야합니다. queue.h 라이브러리를 이해하려고합니다. Java에서 기본적으로 add()List의 끝에있는 항목이지만 queue.h에는 다른 구성원을 허용하지 않는 매크로가 LIST_INSERT_HEAD뿐입니다. 실제로, 작은 테스트는 HEAD에 삽입 함을 보여줍니다 (LIST_FOREACH을 통과하면 마지막으로 삽입 된 요소에서 처음으로 이동 함). 그래서, 이것은 FILO 큐 (스택을 의미)라고해야합니까?왜 BSD queue.h LIST가리스트를 호출 했습니까?

답변

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

'INSERT_TAIL'을 (를) 가지고있는'TAILQ' 매크로가 있습니다. 그러나 List에는 그러한 메소드가 없으므로 나에게는 이상한 것이 있습니다. –

+1

네, 그 디자인 선택, 꼬리에 추가하기 위해, 당신은 TAILQ를 사용해야합니다, 그렇지 않으면리스트는 괜찮습니다. Java LinkedList와 혼동하지 마십시오. – Karthikeyan

0

queue.h에서 제공하는 많은 대기열 옵션이 있습니다. 이 이후

모든 또한 심하게 내부 구조에 대한 커널 내에서 사용되는 것을 의미하는 파일의 전체 경로가 모든 BSD 시스템에 src/sys/sys/queue.h이므로주의, 사전 프로세서에 의해 수행되고, 각 변형은 매우 최적화되어 있습니다 효율성과 최저 메모리 풋 프린트를 위해.

, 현재 단지 4 6 개 선택 중 공식적으로 manual page에 설명되어 나타납니다. 참조 : http://bxr.su/o/share/man/man3/queue.3

대기열 /리스트에 INSERT_TAIL 할 수 있도록하려면, 당신은 아직도 여기에서 선택할 수있는 옵션을 많이 가지고 - SIMPLEQ, XSIMPLEQ, TAILQCIRCLEQ을.

그래서, 요약에 : 이름 LIST에 의해 큐 /리스트의 구현이 꼬리 삽입을 허용하는 것을 말한다에는 법이 없다!