C ++上的链接列表

时间:2013-04-20 17:46:05

标签: c++ pointers linked-list

我正在学校学习链接列表,但我的教授没有说明很多东西..

首先是一个链接列表,在库中构建? 程序员需要创建一个节点类吗?

这是我唯一的例子:

class node;
typedef node*  nodeptr;

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

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

我也不知道“typedef”是什么意思..我知道指针是什么..如果有人可以解释一下,我会很感激..

2 个答案:

答案 0 :(得分:3)

  

首先是一个链接列表,在库中构建?

嗯,不。链表是数据结构。标准库在std::liststd::forward_list中有两种不同的实现方式。


  

程序员需要创建一个节点类

从上面的例子看,你的教授似乎想要你。


  

我也不知道“typedef”是什么意思。

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 :(得分:0)

typedef关键字提供了一种从现有类型创建新类型名称的方法。通常typedef用于通过创建名称比原始类型更少混淆的新类型名称来简化代码。

在您的情况下,现有类型node *用于创建新类型名称nodeptr。 由于typedef语句nodeptr可用于代替node *作为类型名称。

typedef node* nodeptr;

下面的node类有一个数据成员next,其类型名称为nodeptr。 next的类型为node指针(AKA nodeptr)。

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