Создание и заполнение динамического односвязного списка - C (СИ)
Формулировка задачи:
Выручайте! Никак не могу понять как создать и заполнить односвязный список! На лекции дают какими-то отдельными кусками, причем удаление элемента, перемещение, а как создать список непонятно!
Алгоритм записан такой:
1)создать пустой список (указатель списка равен NULL)
2)создание нового эл-а списка. выделение памяти и занесение в список.
Уже 2ой час пытаюсь написать программу, например, необходимо заносить вводимые с клавиатуры числа в динамический список, вида:
Выручайте!
struct LIST{
int number;
struct LIST *next;
};Решение задачи: «Создание и заполнение динамического односвязного списка»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
struct LIST {
int number;
struct LIST *next;
};
//-----------------------------------------------------------------------------
void Push(struct LIST** list, int number) {
struct LIST* node = malloc(sizeof(struct LIST));
node->number = number;
node->next = *list;
*list = node;
}
//-----------------------------------------------------------------------------
void Print(const struct LIST* list) {
if (list) {
Print(list->next);
printf("%d ", list->number);
}
}
//-----------------------------------------------------------------------------
int main() {
int i = 10;
struct LIST* list = NULL;
while (i--) {
Push(&list, i + 1);
}
Print(list);
return 0;
}
Объяснение кода листинга программы
- Создание структуры данных
LISTс полямиnumberиnext. - Создание функции
Pushдля добавления элемента в начало списка. - Создание функции
Printдля печати списка. - Инициализация переменной
iсо значением 10. - Инициализация указателя
listсо значением NULL. - В цикле
whileвызывается функцияPushдля добавления элемента в список. - Вызывается функция
Printдля печати списка. - Возвращается значение 0, что означает успешный конец работы программы.