因此,在下面的代码中,我应该编写一个语句,声明一个名为default的类型为Item的变量,并使用以下字符串将其标题,作者和年成员初始化为:“title”,“author”,和 “1950年”。
#include <stdio.h>
#define SIZE 50
struct book {
char title[SIZE], author[SIZE], year[5];
};
typedef struct book Item;
typedef struct node {
Item item;
struct node * next;
} Node;
typedef Node * List;
int main(void){
Node Node1, Node2;
List pNode = &Node2;
return 0;
}
但我对链表很新,我似乎无法在一个声明中找到一种方法吗?也许我在某种程度上误解了这个问题?我觉得这个问题的答案非常简单,但我无论如何也无法理解链表的概念。
感谢任何人的帮助!
答案 0 :(得分:1)
您的问题与链接列表无关,只与&#34;聚合初始化有关。&#34;您可以这样做:
Item default_ = { "title", "author", "1950" };
答案 1 :(得分:0)
通常,链表节点是动态分配的。您需要的是一组有序的操作来操作您的数据,同时保持数据的一致性。大多数程序在您定义数据和操作后自行编写,因为程序只不过是对数据执行的操作。
所以第一步是初始化一个新列表。最简单的解决方案是常量初始化器。
#define LIST_INIT_VAL NULL
List list = LIST_INIT_VAL; // used like this
第二步是添加一个节点,正如我所说,我们在这里进入动态分配路径。
bool list_push_front(List *p_list, Item const *p_item) { //stdbool.h
Node *new = malloc(sizeof *new);
if(!new)
return false;
new->item = *p_item;
new->next = *p_list;
*p_list = new;
return true;
}
// ...
list_push_front(&list, &(Item){"title", "author", "1950"}); // used like this
等等。尝试首先添加所需的列表操作,然后按照他们的术语编写程序。下一个自然步骤可能是list_free
。
答案 2 :(得分:0)
您需要反向初始化列表,并且必须使用初始化列表。
Item c = { {"title", "author", "year"}, null };
Item b = { {"title", "author", "year"}, &c };
Item a = { {"title", "author", "year"}, &b };