2013-04-20 170 views
-1

我在學校學習鏈接列表,但我的教授沒有指定很多東西..C++上的鏈接列表

首先是鏈接列表在庫中構建? 程序員需要創建一個節點類?

這是我唯一的例子:

class node; 
typedef node* nodeptr; 

class node { 
    public: 
     int number; 
     nodeptr next; 
}; 

//-------------------------------- 
int main () 
{ 
    nodeptr top; 

我不也知道什麼是「類型定義」的意思..我知道指針是什麼..我將不勝感激,如果有人能解釋一下什麼是...

+0

至於typedef:它基本上爲所提到的數據類型分配一個不同的名稱。就像:#define superInt __int64 – 2013-04-20 17:48:08

+3

是的,標準庫包含一個單獨和一個雙向鏈表,分別稱爲'std :: forward_list'和'std :: list'。爲了理解'typedef',繼續參加你的課程? – 2013-04-20 17:48:22

+0

@KerrekSB非常棒的建議你.... – user2171775 2013-04-20 17:55:18

回答

3

首先是一個鏈表庫構建?

那麼,沒有。鏈表是一個數據結構。標準庫在std::liststd::forward_list中有兩個不同的實現。


程序員需要創建一個節點類

從上面的例子中,似乎你的教授要你。


我不也知道什麼是 「類型定義」 的意思。

typedef是關鍵字。其目的是爲現有類型指定替代名稱。因此,例如打電話double使用其他名稱(比方說x),你會喜歡的東西去以下:

typedef double x 

現在你就可以宣佈:

x name = 13.2 

將被翻譯成:

double name = 13.2 

我知道指針是什麼。

指針是一種數據類型,其值可以是特定存儲空間的地址。在C++中獲取特定分配變量的地址,您可以使用&x,其中x是分配的變量。打印&a將以0x...的形式打印存儲器地址。如果聲明類型爲T*的變量,則可以使該變量包含一個相同類型變量的內存地址T。指針前面的*符號意味着指示指針,這意味着獲取它指向的內存空間值

int x = 10 
int* y = &x 
std::cout << (*y); 

在上例中輸出爲10


我將不勝感激,如果有人可以什麼在解釋一點點。

鏈表,在其最簡單的形式,可以等實現以下內容:

struct node { 
     node(x, y = 0) : field(x), next(y) {} 
     int field; 
     node* next; 
}; 

鏈表供應具有動態容器與儘可能多的細胞,因爲它的目的確切需要。其背後的想法是,主node結構應該包含一個成員變量field,它將存儲一個特定的值和一個指向下一個node,將包含另一個值等的指針。

圖形表示可以是以下:

[ a:10 ] ---> [ b:3 ] ---> [ c:7 ] 

在上述例子中的節點的結構將是:

node c = node(7, 0); 
node b = node(3, &c); 
node a = node(10, &b); 

其中0裝置空指針,並且是指一個特殊值「沒有指向」。

+1

我愛你如何回答這個問題,「看起來你的教授希望你這樣做」! :P – 2013-04-20 18:18:25

0

typedef關鍵字提供了從現有類型創建新類型名稱的方法。通常使用typedef通過創建一個名稱比原始類型名稱更簡單的新類型名稱來簡化代碼。

在您的情況下,現有類型node *用於創建新類型名稱nodeptr。 由於typedef語句nodeptr可用於代替node *作爲類型名稱。下面

typedef node* nodeptr; 

node的類具有其類型名nodeptr數據成員next。接下來有node指針類型(AKA nodeptr)。

class node 
{ public: 
    int number; 
    nodeptr next; 
};