Удалить из однонаправленного списка отрицательные элементы - 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;
}

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

В данном коде используется однонаправленный список, представленный с помощью связного списка.

  1. Связной список - это структура данных, состоящая из узлов, каждый из которых содержит значение и ссылку на следующий узел.
    • Тип структуры: TNode - структура, представляющая узел связанного списка. Она содержит целочисленное значение (value) и указатель на следующий узел (next).
    • Алгоритмы работы со списком:
      • Добавление элемента в начало списка: функция Push.
      • Удаление последнего элемента списка: функция Pop.
      • Проверка, является ли значение отрицательным: функция IsNegative.
      • Удаление из списка элементов, удовлетворяющих условию: функция Remove.
      • Печать списка: функция Print.
  2. Основная функция - main.
    • Создание списка: инициализируем список как NULL.
    • Постановка задачи: генерируем случайные отрицательные и положительные числа в диапазоне от -10 до 10 и добавляем их в список.
    • Вывод списка на экран: вызываем функцию Print.
    • Удаление из списка отрицательных чисел: вызываем функцию Remove, передавая в качестве аргумента функцию IsNegative.
    • Вывод списка на экран после удаления: вызываем функцию Print.
    • Завершение работы программы: возвращаем 0. Таким образом, в данном коде решается задача удаления из однонаправленного списка отрицательных элементов.

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


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

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

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