-1

我正在学校学习链接列表,但我的教授没有具体说明很多事情。

首先是一个链表是一个内置库吗?程序员需要创建一个节点类吗?

这是我唯一的例子:

class node;
typedef node*  nodeptr;

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

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

我也不知道“typedef”是什么意思..我知道指针是什么..如果有人能解释一下..

4

2 回答 2

3

首先,链表是内置库吗?

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


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

从上面的示例中,您的教授似乎希望您这样做。


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

typedef是一个关键字。其目的是为现有类型分配替代名称。因此,例如,double用另一个名字(比如说x)打电话时,你会使用如下内容:

typedef double x

现在您可以声明:

x name = 13.2

这将被翻译成:

double name = 13.2

我知道指针是什么。

指针是一种数据类型,其值可以是特定内存空间的地址。在 C++ 中,要获取特定分配变量的地址,您可以使用&xwhere xis 分配的变量。打印&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);

where0表示空指针,是一个特殊值,表示“指向任何东西”。

于 2013-04-20T17:59:52.383 回答
0

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

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

typedef node* nodeptr;

下面的类有一个类型为 namenode的数据成员。next 具有 指针类型(AKA nodeptr)。nextnodeptrnode

class node 
{ public: 
     int number; 
     nodeptr next; 
};
于 2013-04-20T17:58:41.677 回答