C 作为指针的节点

C 作为指针的节点,c,data-structures,C,Data Structures,为什么链接列表中的节点被声明为指针?节点中包含指向另一个节点的指针部分。那么为什么节点本身就是指针呢 struct node { int data; struct node *link; } *start; 现在我们将节点介绍为 struct node *tmp; 现在,这是一个指向数据类型struct node的指针。但是对于链接,我们使用链接指针链接另一个节点 为什么我们不把节点编码为 struct node tmp; 只有…这是因为分配了动态内存..还是其他原因?是的

为什么链接列表中的节点被声明为指针?节点中包含指向另一个节点的指针部分。那么为什么节点本身就是指针呢

struct node
{
    int data;
    struct node *link;
} *start;
现在我们将节点介绍为

struct node *tmp;
现在,这是一个指向数据类型struct node的指针。但是对于链接,我们使用链接指针链接另一个节点 为什么我们不把节点编码为

struct node tmp;

只有…这是因为分配了动态内存..还是其他原因?

是的,这是因为节点是动态分配的。

结构节点tmp可以将tmp用作虚拟节点或哨兵节点,其中不使用它的数据,只使用它的下一个指针指向列表的实际第一个节点

struct node*tmp将使用tmp作为指向列表第一个节点的指针,或者在扫描列表时作为指向列表中某个节点的工作指针

在某些情况下,还使用列表结构:

struct list{
    struct node *head // pointer to first node
    struct node *tail // optional: pointer to last  node
    size_t size;      // optional: number of items in a list
}

循环列表可以只使用指向最后一个节点的尾部指针来实现,而最后一个节点又有一个指向头部/第一个节点的下一个指针。

节点是结构,而不是指针。也许你应该举例说明你的意思。每个节点都知道下一个节点在内存中的位置;要存储此信息,它使用指针。没有其他方法是可能的,因为结构不能包含其类型的成员(那么如何计算其大小?),但可以存储指向其类型的对象的指针;现在我们将节点介绍为Struct node*tmp;现在,这是一个指向数据类型struct node的指针。但是为了链接,我们使用链接指针链接另一个节点。为什么我们将节点编码为struct node tmp;只是……这是因为分配了动态内存……还是其他原因。请把你的代码等放在问题中。为什么?因为您只需要每个节点的一个副本,否则您必须跟踪并更新您拥有的所有副本。这就是使用指针的原因之一,指向一个副本。