c++ - 为什么不能在不创建节点作为指针的情况下创建链表?

标签 c++ pointers struct linked-list

Creating a linked list without declaring node as a pointer中有答案。但我想知道是否还有其他原因导致您无法将节点创建为指针,只是为了清楚起见。

原因之一是新节点的作用域会在函数之外消亡——有没有办法解决这个问题呢?,以及 难道还有其他原因吗?

最佳答案

我一直在使用很多链表(甚至更复杂的结构),其中没有在堆上单独分配节点,但所有节点都是单个数组中的元素。

拥有指向节点的指针并在堆上分配单个节点很常见,但到目前为止不是唯一的选择。例如,对于某些应用程序来说,为了提高效率或简化处理,在“页面”中分配节点可能会更好。

另一个非常常见且经常有用的选项是通过使用数组中的数字索引来创建根本没有指针(甚至不在节点内部)的链表或树。例如

struct Tree {
    struct Node {
        double value;
        int left, right; // Index of left/right child, -1 if missing
    };
    int root = -1;
    std::vector<Node> nodes;
};

关于c++ - 为什么不能在不创建节点作为指针的情况下创建链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61097899/

相关文章:

c++ - 不使用 reinterpret_cast 读取二进制数据

c++ - 为什么 std::pair 的大小与其元素的大小之和不同?

nhibernate - 将不可变结构映射为 NHibernate 中的组件

c - c中的文件指针

C - 大端结构与小端结构相互转换

c - 将结构传递给这样的函数

C++ 在静态方法中使用枚举

c++ - 与它所属的类相同类型的对象的数组是否会创建无限实例?

c++ - 为什么指针返回时不能自动转换为unique_ptr?

c - C 中指针比较如何工作?可以比较不指向同一数组的指针吗?