Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在创建保存结构的数组后,在C中创建一个链表_C_Linked List - Fatal编程技术网

在创建保存结构的数组后,在C中创建一个链表

在创建保存结构的数组后,在C中创建一个链表,c,linked-list,C,Linked List,所以我想简单地做的是创建一个结构,填充它,然后创建一个链表。 到目前为止,我所做的是: 我定义了一个链表如下。然后我为乘客填写了大约40个变量 typedef struct list1 { char var1[10]; char var2[10]; struct list1 *next; }LIST1; 然后,我动态地为它分配了一些内存(比如40个结构项) 为乘客填写了大约40个变量 例如,通过使用 for (i=0;i<40;i++) { st

所以我想简单地做的是创建一个结构,填充它,然后创建一个链表。 到目前为止,我所做的是: 我定义了一个链表如下。然后我为乘客填写了大约40个变量

typedef struct list1               
{
char var1[10];
char var2[10];     
struct list1 *next;
}LIST1; 
然后,我动态地为它分配了一些内存(比如40个结构项)

为乘客填写了大约40个变量 例如,通过使用

for (i=0;i<40;i++)
{
strcpy(list[i].var1,"AAAAAAAA");
strcpy(list[i].var2,"BBBBBBBB");
}

代码运行,但不打印任何内容。这只是我试图解决的一个练习的一部分,我从一些简单的事情开始,看看它是如何工作的。我不想一次只为一个元素分配内存。我被要求分配所有必要的内存,填写结构,然后创建链表。

你走对了。您不必使用
typedef
,您可以在列表中使用一个简单的
struct
,并清楚地使用名称
节点
,这样就不会混淆节点和列表。节点后跟节点是一个列表

struct node {
    char * var1;
    char * var2;
    struct node *next;
};
然后,您可以使用助手函数推送节点

void pushvar1(struct node **head_ref, char *new_data) {
    struct node *new_node = malloc(sizeof(struct node));
    new_node->var1 = strdup(new_data);
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}
以及打印节点的函数

void printListvar1(struct node *node) {
    while (node != NULL) {
        printf(" %s ", node->var1);
        node = node->next;
    }
}
现在你只是一个
函数,还没有成功

int main() {
    struct node *head = NULL;
    int i = 0;
    for (i=0;i<40;i++)
    {
        pushvar1(&head, "AAAAAAAA");
    }

    puts("Created Linked List: ");
    printListvar1(head);
    return 0;
}

你走对了路。您不必使用
typedef
,您可以在列表中使用一个简单的
struct
,并清楚地使用名称
节点
,这样就不会混淆节点和列表。节点后跟节点是一个列表

struct node {
    char * var1;
    char * var2;
    struct node *next;
};
然后,您可以使用助手函数推送节点

void pushvar1(struct node **head_ref, char *new_data) {
    struct node *new_node = malloc(sizeof(struct node));
    new_node->var1 = strdup(new_data);
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}
以及打印节点的函数

void printListvar1(struct node *node) {
    while (node != NULL) {
        printf(" %s ", node->var1);
        node = node->next;
    }
}
现在你只是一个
函数,还没有成功

int main() {
    struct node *head = NULL;
    int i = 0;
    for (i=0;i<40;i++)
    {
        pushvar1(&head, "AAAAAAAA");
    }

    puts("Created Linked List: ");
    printListvar1(head);
    return 0;
}

“但它不起作用。”-怎么会呢?请回答您的问题并具体说明。还请包括您所做的任何调试。每日链接列表问题最终到达。@SanchkeDellowar 10在4天内。请不要在
link->next=NULL中投射
malloc
的结果局部变量
LINK1*link
未初始化。“但它不起作用。”-怎么会这样?请回答您的问题并具体说明。还请包括您所做的任何调试。每日链接列表问题最终到达。@SanchkeDellowar 10在4天内。请不要在
link->next=NULL中投射
malloc
的结果
局部变量
LINK1*link
未初始化。谢谢,非常清楚!这也帮助我找到了解决这个问题的新思路。与其将结构转换为链表,这是我所想的(这显然不是一个好主意),不如将这个结构的值复制到一个类似的结构-新链表上,这个结构已经保存了一些数据,通过使用您建议的代码进行小的修改@我很高兴你喜欢这个答案。我认为C语言有时比其他语言更容易,因为你可以用C语言简洁,而且你不会像在Java中那样一直被迫进行封装。@Dacsanders别忘了释放内存谢谢你,这很清楚!这也帮助我找到了解决这个问题的新思路。与其将结构转换为链表,这是我所想的(这显然不是一个好主意),不如将这个结构的值复制到一个类似的结构-新链表上,这个结构已经保存了一些数据,通过使用您建议的代码进行小的修改@我很高兴你喜欢这个答案。我认为C语言有时比其他语言更容易,因为你可以用C语言简洁,而且你不必像在Java中那样一直进行封装。@Dacsanders别忘了释放内存
./a.out 
Created Linked List: 
 AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA  AAAAAAAA