2012-02-06 65 views
0

我是科羅拉多梅薩大學的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和互聯網,我不會找到實現頭部和尾部的列表函數。

我只是想在實際現實世界編程來準備的,而不是我的教授認爲是真實的世界,所以我的問題是:是它更好地使用一個或另一個,使用哪個我更容易找到,還是在腦海中處理每個問題?

預先感謝您的寶貴時間幫助我解決這個世仇。

+1

看看哪一個會幫助您解決問題更好。很多時候你不需要總是知道尾巴。其他時候你做。就個人而言,我在幾年內沒有使用過「在現實世界中」的鏈表 - 所以很可能你永遠不需要任何一個。 :) – cHao 2012-02-06 20:35:34

+1

在現實世界中編程。我已經在25年的商業編碼中實施過一次鏈表了,結果這是一個錯誤。答案就是做任何標記你任務的人都想要的方式。在la la land之外,您只需抓住一個現有的實施方案,或者使用一個大錘子,直到它實現。 ( – 2012-02-06 20:43:39

+2

)作爲參考,雖然(1)如果你確實使用了一個,那麼這個「接地」的方式對我來說看起來很奇怪(2)如果它是C++,那麼這個函數就不應該存在,頭/尾指針應該隱藏(3)如果這是真正的代碼,那是錯誤的,你最終永遠不會看到你的頭部或尾部,因爲你將重新分配給本地的'head'和'tail', 。不通過者;來電者永遠看不到它改變 – cHao 2012-02-06 20:44:51

回答

0

在「現實世界」中,你將使用一個列表其它程序員設計,實施,優化和測試,你永遠不會知道它是否「接地」,因爲這只是一個實現細節。

什麼是從你的算法課程帶走重要的是:

  • 性能特點。鏈表或向量是否有更快的隨機訪問?更快的追加?更快地移除第一個元素?使用正確的容器不是不成熟的優化。

  • 看到足夠不同的實現方式,因此如果你曾經有步驟通過與調試你的代碼,你就不會莊嚴困惑。如果你看到at-end-of-list測試返回true,但是下一個節點指針不是NULL,如果你之前從未看到過「接地」列表實現,那麼你可能會感到非常困惑。

+0

IE我很可能會使用STL列表或由我工作的任何地方內部開發的列表。很高興知道,謝謝!如果我有代表^^,我會投票; – 2012-02-06 23:23:00

+0

@AndrewQ:對。只有極少數的程序員從事圖書館開發工作,並實際構建這些數據結構。其他人只是使用它們。 – 2012-02-06 23:24:00

+0

謝謝!現在,我會像接近數學一樣接近這門課程:在課堂上按照自己的方式進行,按照課堂上的方式進行。 – 2012-02-06 23:30:55

相關問題