提问者:小点点

节点a和节点s有什么不同?


struct Node
{
    int w;
    Node* w1;
};
int main(){
    Node a;
    Node *s;
}

在上面的代码中,a和*S之间的区别是什么。 它们有什么不同,也是为什么我们在创建链接列表时使用节点*S。 谢谢!!!


共2个答案

匿名用户

节点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