首先,链表是内置库吗?
嗯,不。链表是一种数据结构。std::list
标准库在和中有两种不同的实现std::forward_list
。
程序员需要创建一个节点类
从上面的示例中,您的教授似乎希望您这样做。
我也不知道“typedef”是什么意思。
typedef
是一个关键字。其目的是为现有类型分配替代名称。因此,例如,double
用另一个名字(比如说x
)打电话时,你会使用如下内容:
typedef double x
现在您可以声明:
x name = 13.2
这将被翻译成:
double name = 13.2
我知道指针是什么。
指针是一种数据类型,其值可以是特定内存空间的地址。在 C++ 中,要获取特定分配变量的地址,您可以使用&x
where x
is 分配的变量。打印&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
表示空指针,是一个特殊值,表示“指向任何东西”。