2013-07-17 16 views
0

我的「mothertongue」是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文件所述(雖然頗爲模糊)。是的,一種實現Stack ADT的方法是using a linked list

1

你應該錯過別人,INSERT_TAIL必須存在。請做一個查找並確認。

它既有的功能,列表和隊列:)

可能是下面的,不是一個,你正在尋找,反正 在Java中http://bxr.su/o/queue.h

+0

有'TAILQ'宏具有'INSERT_TAIL'。但是List中沒有這樣的方法,所以對我來說很奇怪。 –

+1

是的,它的設計選擇,添加尾巴,你必須使用TAILQ,否則LIST是好的。請不要混淆Java LinkedList。 – Karthikeyan

0

queue.h提供了一些隊列選項。由於這一切都是由預處理器完成的,並且還要注意,在每個BSD系統上文件的完整路徑是src/sys/sys/queue.h,這意味着它在內核中用於內部結構的頻繁使用,每個變體都經過高度優化提高效率並降低內存佔用。 (讓每個BSD系統可以在這裏稍微不同的選擇)

在OpenBSD,似乎有一對夫婦的選擇了隊列選擇:

*無論哪個原因,看來,目前只有4從6個選項中manual page被正式記錄在案。 請參閱:http://bxr.su/o/share/man/man3/queue.3

如果你想能夠INSERT_TAIL到隊列/列表,你還是有很多選擇從這裏選擇 - SIMPLEQXSIMPLEQTAILQCIRCLEQ

所以,摘要:有沒有法律規定說,通過名稱LIST隊列/列表實現必須允許尾部着!

相關問題