Удалить из однонаправленного списка отрицательные элементы - C (СИ)
Формулировка задачи:
Создать список из случайных положительных и отрицательных целых чисел (от –10 до 10) и удалить из него отрицательные элементы.
Буду очень признателен за помощь.
Решение задачи: «Удалить из однонаправленного списка отрицательные элементы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct _TNode { int value; struct _TNode* next; } TNode; //----------------------------------------------------------------------------- TNode* Push(TNode** list, int value) { TNode* node = malloc(sizeof(TNode)); node->value = value; node->next = *list; *list = node; return *list; } //----------------------------------------------------------------------------- int Pop(TNode** list) { TNode* node = *list; int value = node->value; *list = node->next; free(node); return value; } //----------------------------------------------------------------------------- int IsNegative(int value) { return (value < 0); } //----------------------------------------------------------------------------- TNode* Remove(TNode** list, int (*Func)(int)) { TNode** node = list; while (*node) { if (Func((*node)->value)) { Pop(node); } else { node = &(*node)->next; } } return *list; } //----------------------------------------------------------------------------- void Print(const TNode* list) { for (; list; list = list->next) { printf("%d ", list->value); } printf("\n"); } //----------------------------------------------------------------------------- int main() { TNode* list = NULL; unsigned i = 10; srand(time(NULL)); while (i--) { Push(&list, rand() % 20 - 10); } Print(list); Remove(&list, IsNegative); Print(list); return 0; }
Объяснение кода листинга программы
В данном коде используется однонаправленный список, представленный с помощью связного списка.
- Связной список - это структура данных, состоящая из узлов, каждый из которых содержит значение и ссылку на следующий узел.
- Тип структуры: TNode - структура, представляющая узел связанного списка. Она содержит целочисленное значение (value) и указатель на следующий узел (next).
- Алгоритмы работы со списком:
- Добавление элемента в начало списка: функция Push.
- Удаление последнего элемента списка: функция Pop.
- Проверка, является ли значение отрицательным: функция IsNegative.
- Удаление из списка элементов, удовлетворяющих условию: функция Remove.
- Печать списка: функция Print.
- Основная функция - main.
- Создание списка: инициализируем список как NULL.
- Постановка задачи: генерируем случайные отрицательные и положительные числа в диапазоне от -10 до 10 и добавляем их в список.
- Вывод списка на экран: вызываем функцию Print.
- Удаление из списка отрицательных чисел: вызываем функцию Remove, передавая в качестве аргумента функцию IsNegative.
- Вывод списка на экран после удаления: вызываем функцию Print.
- Завершение работы программы: возвращаем 0. Таким образом, в данном коде решается задача удаления из однонаправленного списка отрицательных элементов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д