Создать список из целых чисел, отсортировать по возрастанию и вывести на экран - C (СИ)
Формулировка задачи:
Помогите плз написать программу на си:
программно создать список из целых чисел, отсортировать по возрастанию и вывести на экран.
одна задача от зачета отделяет, помогите плз =) заранее спасибо...
неужели никто не знает, как сделать?
народ, помогите плз...
Решение задачи: «Создать список из целых чисел, отсортировать по возрастанию и вывести на экран»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct NODE { int value; struct NODE * next; } node_t; node_t * new_node(int val, node_t * last){ node_t * n; if ( ( n = (node_t*)malloc(sizeof(node_t)) ) == NULL ) return NULL; n->value = val; n->next = NULL; if ( last ) last->next = n; return n; } node_t * min_node(node_t * n){ node_t * minNode = n; while ( n = n->next ) if ( n->value < minNode->value ) minNode = n; return minNode; } void swap_vals(node_t * a, node_t * b){ int val; val = a->value; a->value = b->value; b->value = val; } void sort_nodes(node_t * n){ node_t * minNode; while ( n->next ){ if ( ( minNode = min_node(n) ) != n ) swap_vals(n, minNode); n = n->next; } } void print_nodes(const node_t * n){ while ( n ){ printf("%02d ", n->value); n = n->next; } printf("\n"); } void delete_nodes(node_t * n){ node_t * t; while ( n ){ t = n->next; free(n); n = t; } } int main(void){ node_t * first, * last; int needed; first = last = NULL; printf("Nodes needed: "); if ( scanf("%d", &needed) != 1 || needed < 1 ){ fprintf(stderr, "Wrong number!\n"); exit(EXIT_FAILURE); } srand(time(NULL)); while ( needed-- ){ if ( ( last = new_node(rand() % 100, last) ) == NULL ){ fprintf(stderr, "Can't create a new node!\n"); exit(EXIT_FAILURE); } if ( ! first ) first = last; } if ( ! first ){ fprintf(stderr, "Shit happens!\n"); exit(EXIT_FAILURE); } printf("Unsorted:\n"); print_nodes(first); sort_nodes(first); printf("Sorted:\n"); print_nodes(first); delete_nodes(first); exit(EXIT_SUCCESS); }
Объяснение кода листинга программы
- Создание списка из целых чисел с помощью динамического массива и связывание элементов списка друг с другом.
- Создание функции
new_node
, которая создает новый узел списка и добавляет его в конец списка. - Создание функции
min_node
, которая находит минимальный элемент в списке. - Создание функции
swap_vals
, которая меняет значения двух узлов списка местами. - Создание функции
sort_nodes
, которая сортирует список по возрастанию. - Создание функции
print_nodes
, которая выводит значения всех узлов списка. - Создание функции
delete_nodes
, которая освобождает память, занятую узлами списка. - Ввод количества элементов списка с клавиатуры.
- Генерация случайных чисел для заполнения списка.
- Проверка корректности введенного количества элементов списка.
- Проверка корректности выделения памяти под новые узлы списка.
- Проверка корректности работы алгоритма сортировки.
- Вывод отсортированного списка на экран.
- Освобождение памяти, занятой узлами списка.
- Выход из программы с указанным статусом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д