2013-02-27 55 views
-1

請看看下面的圖創建鏈接列表作爲模板:我的實現是否正確?

enter image description here

這是我是如何實現它

template <typename T> 

class LinkedList 
{ 

    struct Link { 
    T data; 
    struct Link *next; 

    public: 
    T *first; 
    }; 



LinkedList::LinkedList(void) 
{ 
    first = 0; 
} 


LinkedList::~LinkedList(void) 
{ 
} 

bool LinkedList::IsEmpty() 
{ 
    return (first==0); 
} 

void LinkedList::Insert(Link *newLink) 
{ 
    newLink->next = first; 
    first = newLink; 
} 

void LinkedList::Display() 
{ 
    Link *current = first; 

    while(current!=0) 
    { 
     current->Display(); 
     current = current->next; 
    } 
} 

T *LinkedList::Find(int value) 
{ 
    Link *current = first; 

    while(current->GetData()!=value) 
    { 
     if(current->next==0) 
     { 
      return 0; 
     } 
     else 
     { 
      current = current->next; 
     } 
    } 

    return current; 
} 

T *LinkedList::Delete(const int id) 
{ 
    Link *current = first; 
    Link *previous = first; 

    while(current->GetData()!=id) 
    { 
     if(current->next==0) 
     { 
      return 0; 
     } 
     else 
     { 
      previous = current; 
      current = current->next; 
     } 
    } 

    if(current==first) 
    { 
     first = first->next; 
    } 
    else 
    { 
     previous->next = current->next; 
    } 

    return current; 
} 
}; 

我覺得不舒服對我實施。特別是,我不知道在insert()方法內使用T類型應該怎麼做。

以下是另一個類的示意圖,它是next指針是武器代表鏈接列表中的鏈接。我懷疑這是不是「鏈接」類。接下來是一個指向列表中下一個武器的指針。如果它影響到上面的代碼,我在這裏發佈它。

enter image description here

如何應對的方法insert()裏面?除此之外,我的鏈接列表是否正確?無論如何,第一次使用鏈接列表的模板。請幫忙!

注:不允許內置數據結構。這就是爲什麼我發佈了班級的圖表。如果我需要在數據結構支持中構建,那麼我不會問如何由我的自己構建代碼。

+0

爲什麼不使用可用的許多鏈表實現之一? – dtech 2013-02-27 09:12:23

+0

如果可能,請使用'std :: list'或其他標準庫容器,除非有真正的理由不這樣做。 – 2013-02-27 09:15:54

+0

@ddriver:nono,需要我自己做 – 2013-02-27 10:02:52

回答

0

的問題,我寧願回答:

我的具體問題/演習是....

如何解決使用std::list或其他一些標準庫容器我的問題,這將可能使用更少的線條,更容易理解,更高效並幫助我在程序員中獲得更多成就?

的潛問題,我努力不回答:

什麼是錯我的代碼?

我想你實際上是在問的問題:

如何解決我的insert()方法?

答案只有最後一個問題:

好像你正在嘗試新的鏈接添加到列表的前面。從概念上講,我會將它追加到列表的後面,但是,嘿,每個都是他自己的。

衝突是在類型:類裏面,你first的類型是T *,其中T可能是實現GetData()一些自定義的類。所以first指向T,它應該指向Link,它指向T

然後你的insert()方法更有意義。

但是,如果沒有一個可定義的預測輸出的代碼片段,您的代碼是否正確是非常困難的。至少在標準庫中,您總是可以假設如果有問題,它不在鏈接列表實現中。

你需要自己做,因爲它是功課嗎?