2017-05-24 27 views
3
struct node 
{ 
    int data; 
    struct node *next; 
}*start; 

我不明白struct node *next做什麼,我知道它指向下一個變量的地址;但如何在實施?是node *next類似於struct node *next理解鏈表實現(結構部分)有困難嗎?

*startstruct node *start相似嗎?

我發現很難理解鏈表實現。

回答

3

我不明白struct node *next做什麼,我知道它指向下一個變量的地址; ...

這是正確的。

...但如何在實施?

實現與您描述的行爲非常相似:指針實現爲一個對象,其值是指向對象的內存地址。

node *next類似於struct node *next

不僅相似,而且幾乎完全相同。


並且怎麼樣*start是類似於struct node *start

struct node *start。請參閱完整聲明:

struct node /* structure definition */ *start; 

它是一個變量的組合聲明和結構的定義。


†的struct關鍵字只是用來消除歧義,以下標識符是在名稱空間結構標籤††。在你的情況下,它是多餘的,因爲沒有非結構標識符Node來消除歧義,並且在C++結構中標籤也是類型名稱。

您可能要看的是C代碼,其中名稱空間††說明符是結構標記必需的。

††在這種情況下,我指的是C名稱空間,而不是C++名稱空間。

+0

謝謝先生的回答。給我很多感謝 –

1

節點需要指向下一個節點。所以它有一個名爲next的指針變量。由於next也是一個節點結構,所以你聲明它爲struct node *next;start是你的第一個節點。

+0

我可以在接下來寫結點*而不是結點*嗎? –

+0

是的,你可以如果你正在編寫C++代碼。 – sithereal

1

你的代碼真的看起來像一塊C而不是C++代碼。在C++中,你大概不會編寫自己的列表實現,但使用std::liststd::forward_list。如果你這樣做,它看起來像

class list 
{ 
    struct node 
    { 
    type data;   // type could be a template parameter 
    node*next=nullptr; // set next to null by default 
    }; 
    node*head=nullptr; // list is empty by default 
public: 
    /* ... */ 
}; 

尤其在struct node*next;struct關鍵字是沒有必要和start指針可以爲了清楚而以單獨的行申報。

+0

你能不能告訴我NULL和nullptr之間的區別? –

+0

['NULL'](https://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0)是一個C宏,應該避免在C++中使用。 C++應該使用關鍵字['nullptr'](http://en.cppreference.com/w/cpp/language/nullptr)來代替。 – Walter

2

*startstruct node *start相似嗎?

如果您定義了一個結構並在其後面放置一個名稱,則可以聲明該結構的變量。 這裏你聲明你的start變量是node*類型的指針(指向節點)。所以名爲start的變量是您的第一個節點。

我不明白struct node *next做什麼,我知道它指向下一個變量的地址;但如何在實施?

如上所述,您的列表包含data as intaddress of the next節點。

在該列表的實現中,您將爲每個新節點分配內存,並將該節點的地址放入結構的next成員中。爲了更多的理解鏈表,我會看看here

因此,我建議編寫函數用於插入,刪除等

如果用列表的工作是面向對象可能會有所幫助。但花點時間瞭解越來越複雜的代碼。

+0

謝謝兄弟。幫了我很多。 –

+0

如果您接受某個給定答案或要求提供更多信息,那該多好。 –