struct Node
{
int w;
Node* w1;
};
int main(){
Node a;
Node *s;
}
在上面的代码中,a和*S之间的区别是什么。 它们有什么不同,也是为什么我们在创建链接列表时使用节点*S。 谢谢!!!
节点a是一个对象。 它在内存中分配一些空间。 Node*S1-是指向类型为Node的对象的指针,但是对象本身必须使用例如新运算符来创建。 或者我们必须用&; 接线员。 它只是一个保存地址的变量。 该变量的大小取决于平台(x86上为4字节,x86_64上为8字节)。
链表的每个节点都存储指向下一个节点的指针。 这就是为什么我们这里需要一个指针。 因此,如果您有权访问该节点,则可以访问下一个节点并访问列表的末尾。
免责声明:给出的代码是非常基本的,仅供解释。 这不是你在现实生活中创建链表的方式。 手动连接节点不是一个很好的模式。 我建议您学习更多的基本语言概念,如指针,引用,对象生存期。
// Node type definition
struct Node
{
int w;
Node* w1;
};
int main() {
// Separate nodes
Node n1;
Node n2;
Node n3;
// Now this is a linked list
n1.w1 = &n2;
n2.w1 = &n3;
n3.w1 = nullptr; // to mark the end
// Get pointer to n2 from n1
Node *n2_ptr = n1.w1;
Node *n3_ptr = n2.w1;
// Check if n3 is the last element
if (n3_ptr->w1 == nullptr) {
// this is the end of the list
}
// walk the list
Node *node = &n1;
while (node != nullptr) {
node->w *= 2; // do smth with data
node = node->w1; // go to the next node
}
return 0;
}
基本上,您使用链表,用于大型数据列表,其中列表中的项目总数正在变化。
-------
| W | W1| => A Node in a linked list
-------
这个框(结构节点)基本上就是我们所说的链表中的节点。 它存储相应节点的值w
(类型int
),还存储下一个节点的地址w1
(类型struct node*
)。 因此,通过存储下一个节点的地址,我们在节点之间形成一个链接,称为链表。
表示链表(连接两个不同节点)的框图:
------- -------
| W | W1| =====> | W | W1| ..........
------- -------
在上面代码中,a和*S之间的区别是什么
节点a
为节点分配内存
node*s
这基本上是指向链表中某个节点的指针(这里仍然没有指向任何)
这也是我们在创建链接列表时使用节点*S的原因
正如您在上面已经看到的,我们将另一个节点的地址存储在一个节点中。 因此,为了存储地址,我们需要一个指针,这就是为什么我们需要使用node*s