Создать список из целых чисел, отсортировать по возрастанию и вывести на экран - 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);
}

Объяснение кода листинга программы

  1. Создание списка из целых чисел с помощью динамического массива и связывание элементов списка друг с другом.
  2. Создание функции new_node, которая создает новый узел списка и добавляет его в конец списка.
  3. Создание функции min_node, которая находит минимальный элемент в списке.
  4. Создание функции swap_vals, которая меняет значения двух узлов списка местами.
  5. Создание функции sort_nodes, которая сортирует список по возрастанию.
  6. Создание функции print_nodes, которая выводит значения всех узлов списка.
  7. Создание функции delete_nodes, которая освобождает память, занятую узлами списка.
  8. Ввод количества элементов списка с клавиатуры.
  9. Генерация случайных чисел для заполнения списка.
  10. Проверка корректности введенного количества элементов списка.
  11. Проверка корректности выделения памяти под новые узлы списка.
  12. Проверка корректности работы алгоритма сортировки.
  13. Вывод отсортированного списка на экран.
  14. Освобождение памяти, занятой узлами списка.
  15. Выход из программы с указанным статусом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы