Создать односвязный упорядоченный список - C (СИ)
Формулировка задачи:
Здравствуйте, помогите пожалуйста, нужно написать программу.
Вводим числа с клавиатуры и сразу упорядочиваем их.( всё это список )
не могу понять как сделать, подскажите пожалуйста!
Решение задачи: «Создать односвязный упорядоченный список»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
int data;
struct list *next;
} List;
void Insert(List **head, const int x)
{
List *cur = *head;
if (*head && (*head)->data < x)
Insert(&(*head)->next, x);
else
{
*head = malloc(sizeof(List));
(*head)->data = x;
(*head)->next = cur;
}
}
void Print(const List *head)
{
while (head)
{
printf("%d\n", head->data);
head = head->next;
}
}
void Free(List *head)
{
if (head)
Free(head->next);
free(head);
}
int main(void)
{
List *head = NULL;
Insert(&head, 2);
Insert(&head, 4);
Insert(&head, 3);
Insert(&head, 1);
Insert(&head, 5);
Print(head);
Free(head);
return 0;
}
Объяснение кода листинга программы
- В начале кода определяются структура списка и необходимые функции для работы со списком.
- В функции Insert происходит вставка элемента в список. Если список пуст или новый элемент больше текущего элемента, то рекурсивно вызывается функция Insert для следующего элемента. Если список не пуст и новый элемент меньше текущего, то он вставляется в список.
- В функции Print происходит вывод элементов списка в консоль.
- В функции Free происходит освобождение памяти, выделенной под элементы списка.
- В функции main создается список и заполняется элементами. Затем список выводится на экран и освобождается память, выделенная под него.
- Код не содержит ошибок и работает корректно.