我是科羅拉多梅薩大學的csci學生。該部門的負責人告訴接地的方法鏈表:
更好地使用接地列表,或不是?
struct nodeType
{
int id;
nodeType *link;
};
void createList(nodeType *&head, nodetype *&tail)
{
head = new nodetype;
tail = new nodetype;
head->id=-1; //some initialize value
head->link=tail;
tail->link=NULL;
}
void insertList(nodeType *&head, nodeType *&tail)
{
nodetype *knew,*prior, *next;
knew = new nodetype;
knew ->name = name
prior = head;
next = head->link;
while(next != tail && knew->id > next->id)
{
prior = next;
next = next->link;
}
prior->link = knew;
knew->link = next;
}
她教這個原因顯而易見。在頭部和尾部接地的情況下,當您調用上述函數時,插入起來更容易,然後編寫一個函數以將所有數據附加到這兩個節點中,並且在編寫刪除函數時稍微容易一些,因爲您從不刪除頭部或尾巴,因此它更難以失去清單並創造垃圾。
我的算法教授說,在其他地方,我遇到的名單「在現實世界中,」未接地的列表會更好。其他語言,使用STL和互聯網,我不會找到實現頭部和尾部的列表函數。
我只是想在實際現實世界編程來準備的,而不是我的教授認爲是真實的世界,所以我的問題是:是它更好地使用一個或另一個,使用哪個我更容易找到,還是在腦海中處理每個問題?
預先感謝您的寶貴時間幫助我解決這個世仇。
看看哪一個會幫助您解決問題更好。很多時候你不需要總是知道尾巴。其他時候你做。就個人而言,我在幾年內沒有使用過「在現實世界中」的鏈表 - 所以很可能你永遠不需要任何一個。 :) – cHao 2012-02-06 20:35:34
在現實世界中編程。我已經在25年的商業編碼中實施過一次鏈表了,結果這是一個錯誤。答案就是做任何標記你任務的人都想要的方式。在la la land之外,您只需抓住一個現有的實施方案,或者使用一個大錘子,直到它實現。 ( – 2012-02-06 20:43:39
)作爲參考,雖然(1)如果你確實使用了一個,那麼這個「接地」的方式對我來說看起來很奇怪(2)如果它是C++,那麼這個函數就不應該存在,頭/尾指針應該隱藏(3)如果這是真正的代碼,那是錯誤的,你最終永遠不會看到你的頭部或尾部,因爲你將重新分配給本地的'head'和'tail', 。不通過者;來電者永遠看不到它改變 – cHao 2012-02-06 20:44:51