在C中的链表中初始化变量

时间:2017-05-01 04:44:37

标签: c linked-list initialization

因此,在下面的代码中,我应该编写一个语句,声明一个名为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;
}

但我对链表很新,我似乎无法在一个声明中找到一种方法吗?也许我在某种程度上误解了这个问题?我觉得这个问题的答案非常简单,但我无论如何也无法理解链表的概念。

感谢任何人的帮助!

3 个答案:

答案 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 };