为啥宁愿使用指向结构的指针而不是链表中的常规结构类型变量?

Posted

技术标签:

【中文标题】为啥宁愿使用指向结构的指针而不是链表中的常规结构类型变量?【英文标题】:Why rather use pointer to struct than regular struct-type vars in chained list?为什么宁愿使用指向结构的指针而不是链表中的常规结构类型变量? 【发布时间】:2016-03-27 01:17:24 【问题描述】:

在大学课堂上,他们告诉我们,如果我们想创建一个链表,我们需要创建一个结构并将链表的每一部分都作为一个指针来处理。 像这样:

typedef struct node_elem 
    int key;
    int value;
    struct node_elem* next;
 node;
typedef node* node_ptr; 

int main() 
    node_ptr b;
    b = (node_ptr) malloc(sizeof(node));
    b->key = 2; b->value=20;

我认为这是将数据写入结构的唯一可靠方法,但我只是尝试了以下方法并且效果很好:

node a, c; // this instead of pointer, direct declaration
node_ptr b;
b = (node_ptr) malloc(sizeof(node));
a.key = 1; a.value = 10;
a.next = b;
b->key = 2; b->value = 20;
b->next = &c;
c.key = 3; c.value = 30;

不,我的问题是:为什么还要使用指针变体?另一种方式似乎更容易,因为我不需要单独分配内存。无论哪种方式,我都可以遍历列表。

【问题讨论】:

“指针版本”是指使用malloc(即b变量)分配内存,而不是创建局部变量(即ac变量)? 尝试创建一个包含 1000 个节点的列表,然后自己看看 :) 你想写下 1000 个变量声明吗? 【参考方案1】:

您可以通过两种方式分配列表节点:静态或动态,并且有效。但是链表的使用意义是让链表以任意大小增长,用任意数量的节点填充链表。

如果有静态节点,为什么要制作链表?

如果你不知道节点的数量:你如何静态声明那些节点?

【讨论】:

以上是关于为啥宁愿使用指向结构的指针而不是链表中的常规结构类型变量?的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 链表_双向链表的接口定义

C语言数据结构——链表

数据结构---线性表(链表)

指向结构的指针向量

java如何实现链表

数据结构——循环链表