Создайте связанный список в C после создания массива, который содержит структуру

57
5

Поэтому я хочу кратко остановиться на создании структуры, ее заполнении и создании связанного списка. До сих пор я сделал следующее: я определил связанный список, как показано ниже. Затем я заполнил его примерно 40 переменными для ПАССАЖИРОВ

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

Затем я динамически выделял ему некоторую память (для размещения, например, 40 элементов структуры)

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

Заполнил его примерно 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;
}

Код запускается, но он ничего не распечатывает. Это всего лишь часть упражнения, которое я пытаюсь решить, и я начал с чего-то простого, чтобы понять, как это работает. Я не хочу выделять память только для одного элемента за раз. Меня попросят выделить всю необходимую память, заполнить структуру и создать связанный список.

спросил(а) 2016-12-20T23:14:00+03:00 3 года, 10 месяцев назад
1
Решение
90

Вы на правильном пути. Вы не должны использовать 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

ответил(а) 2016-12-20T23:34:00+03:00 3 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема