【发布时间】: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变量)分配内存,而不是创建局部变量(即a或c变量)? -
尝试创建一个包含 1000 个节点的列表,然后自己看看 :) 你想写下 1000 个变量声明吗?