struct node
{
int data;
struct node *next;
}*start;
我不明白struct node *next
做什麼,我知道它指向下一個變量的地址;但如何在實施?是node *next
類似於struct node *next
?理解鏈表實現(結構部分)有困難嗎?
*start
與struct node *start
相似嗎?
我發現很難理解鏈表實現。
struct node
{
int data;
struct node *next;
}*start;
我不明白struct node *next
做什麼,我知道它指向下一個變量的地址;但如何在實施?是node *next
類似於struct node *next
?理解鏈表實現(結構部分)有困難嗎?
*start
與struct node *start
相似嗎?
我發現很難理解鏈表實現。
我不明白
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++名稱空間。
節點需要指向下一個節點。所以它有一個名爲next
的指針變量。由於next也是一個節點結構,所以你聲明它爲struct node *next;
。 start
是你的第一個節點。
我可以在接下來寫結點*而不是結點*嗎? –
是的,你可以如果你正在編寫C++代碼。 – sithereal
你的代碼真的看起來像一塊C而不是C++代碼。在C++中,你大概不會編寫自己的列表實現,但使用std::list
或std::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
指針可以爲了清楚而以單獨的行申報。
你能不能告訴我NULL和nullptr之間的區別? –
['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
*start
與struct node *start
相似嗎?
如果您定義了一個結構並在其後面放置一個名稱,則可以聲明該結構的變量。 這裏你聲明你的start
變量是node*
類型的指針(指向節點)。所以名爲start
的變量是您的第一個節點。
我不明白
struct node *next
做什麼,我知道它指向下一個變量的地址;但如何在實施?
如上所述,您的列表包含data as int
和address of the next
節點。
在該列表的實現中,您將爲每個新節點分配內存,並將該節點的地址放入結構的next
成員中。爲了更多的理解鏈表,我會看看here。
因此,我建議編寫函數用於插入,刪除等
如果用列表的工作是面向對象可能會有所幫助。但花點時間瞭解越來越複雜的代碼。
謝謝兄弟。幫了我很多。 –
如果您接受某個給定答案或要求提供更多信息,那該多好。 –
謝謝先生的回答。給我很多感謝 –