【问题标题】:Stack using linked list. Struct field is of the same type as the struct使用链表堆叠。结构字段与结构的类型相同
【发布时间】:2021-02-24 10:30:04
【问题描述】:

在使用链表练习堆栈时,我遇到了以下代码:

class stack {
private:
    struct node {
        double value;
        node* next;
    };
    size_t stack_size;
    node* head;
...
}

如您所见,结构node 有一个指针字段*node。字段如何与结构具有相同类型?该字段是指向结构的指针,对吗?但它看起来是递归的(?)。我以前没见过这样的风格,这是什么意思?这样写的目的是什么?

【问题讨论】:

    标签: c++ struct linked-list stack


    【解决方案1】:

    字段如何与结构的类型相同?

    不能,这不会编译(注意node这个例子中的数据成员不是指针):

    struct node {
        double value;
        node next;
    };
    

    但是node *next 是一个指针,它可以工作,因为编译器知道node* 将是你机器上指针的大小。

    那个字段是指向结构的指针,对吧?

    正确。

    但它看起来是递归的(?)

    正确。它反映了链表是如何工作的。每个项目都指向下一个,直到下一个是哨兵 (nullptr)。

    没见过这样的风格,是什么意思?

    不确定您所说的“例如样式”是什么意思。本质是您可以声明一个类型,比如struct MyDataType;,然后拥有指向它的指针或引用,而无需完整的类型定义可用。这是针对多个目标的常用技术。您在这里介绍的那个,还有 PIMPL 成语等等。

    这样写的目的是什么?

    希望上述问题的答案也回答了这个问题:)

    【讨论】:

      【解决方案2】:

      node* 不是node。如果您愿意,可以将其称为“递归”,因为每个node 都可以有一个指向另一个node 的成员。虽然它不是无限递归,因为node* 可以指向node,但不一定如此。当我像这样创建node 时:

       node n;
      

      那么node 有一个未初始化的next 成员。没有什么递归的。

      这样写的目的是什么?

      在链表中,通常每个节点都有指向链表中下一个节点的链接。这可以通过具有node* next 成员的node 来实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 2020-08-26
        • 1970-01-01
        • 2023-03-30
        相关资源
        最近更新 更多