2013-04-20 96 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; 
};