为什么在链表中声明指向同一结构体的指针?

Why do we declare pointer to the same struct in Linked Lists

本文关键字:结构体 指针 链表 声明 为什么      更新时间:2023-10-16
struct Node
{
int value;
Node *next;
Node *prev;
};

这是一个链表的创建。我的问题是,为什么我们声明同一结构体的指针。例如节点*next。如果我们要有一个整数链表,我们可以直接使用int *int *prev而不是使用节点*next吗?

链表中的每个元素不仅包含数据(在您的示例中为int),还包含指向下一个元素的指针(在双链表中,也有指向前一个元素的指针)。没有它,就不能构造一个超过两个元素的列表。

结构用于在一个公共内存块中对变量列表进行分组,这有助于使用单个指针访问元素。在你的问题中,你说为什么我们不只使用int *如果我们使用,我们不能分组其他元素,也不能同时保存值和链接。

把结构体想象成容器,里面存储着对象(int, char…)。要访问特定容器中的对象,首先需要找到容器,因此需要容器的地址(即。(struct的地址)。
考虑以下结构。

struct Node  
{  
int value;  
int *next  
};

struct Node内部有一个整数和一个指向整数的指针。当你为第一个结构体分配内存时,它就像一个容器,里面存放着一个整数和一个指向整数的指针。在这种情况下,链将以第一个结构本身结束,因为您没有指向第二个结构(从第一个结构内部),第二个结构可以保存指向第三个结构的指针,以此类推。
如果你想把这个结构体链接到另一个相同类型的结构体(实际上是创建一个链表),你需要一个指针,它可以指向另一个相同类型的结构体。因此,需要在任何用于链表的结构中都有一个指向相同类型结构的指针。