在创建包含结构的数组后,在C中创建链接列表

时间:2016-12-20 20:14:28

标签: c linked-list

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

typedef struct list1               
{
char var1[10];
char var2[10];     
struct list1 *next;
}LIST1; 

然后我动态地为它分配了一些内存(例如托管40个结构项)

list  = (LIST1 *) malloc ((40)*sizeof(LIST1));

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

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

我现在需要做的是连接所有这些已存在于链表中的值,并使用此链表打印结果。

我正在尝试类似的事情:

LINK1 *link, *start=NULL, *tmp;

for (i=0;i<40;i++)
    {link->next = NULL;
    if (start==NULL)
        start = link;
    else{
        tmp=start;
        while (tmp->next !=NULL) tmp=tmp->next;
        tmp->next=link;
        }

     }

然后打印var1的结果

while (tmp!=NULL)
{
    printf("%s",tmp->var1);
    tmp=tmp->next;
}

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

1 个答案:

答案 0 :(得分:4)

你是正确的方式。您没有被迫使用typedef,您可以只使用普通struct作为列表,并明确使用名称node,这样就不会混淆节点和列表。节点后跟一个节点是一个列表。

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

现在你只是main功能还没有成功。

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

完成计划

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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;
    }
}
void freeList(struct node* head)
{
    struct node* tmp;

    while (head != NULL)
    {
        tmp = head;
        head = head->next;
        free(tmp->var1);
        free(tmp);
    }

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

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

测试

./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