Вывод на экран содержимого списка ShowData - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Реализовать список и функции работы с ним. С помощью рекурсивных алгоритмов реализовать операции: • вывод на экран содержимого списка ShowData(), • поиск элемента с заданным значением в списке. Результат функции GetPos() – указатель на найденный элемент. • очистка списка Clear() • удаление элемента с заданным значением из списка Delete(). С помощью итерационных алгоритмов реализовать операции: • получение значения элемента в заданной позиции списка GetData(), • получение номера позиции в списке элемента с заданным значением GetPos(), • очистка списка Clear() • включение нового элемента в список Insert(), • удаление элемента с заданным номером позиции из списка Delete(). Односвязный упорядоченный список. Рекурсивные алгоритмы операций

Решение задачи: «Вывод на экран содержимого списка ShowData»

textual
Листинг программы
struct Data
{
    int key;
};
struct Node
{
    Node* next;
    Data* data;
};
void Insert(Node** root,Data* data)
{
    if(!*root)
    {
        *root = new Node;
        (*root)->next = NULL;
        (*root)->data = data;
    }
    else
    {
        Node* i = *root;
        while(i->next)
            i = i->next;
        i->next = new Node;
        i = i->next;
        i->data = data;
        i->next = NULL;
    }
}
void ShowData(Node* root)
{
    if(root)
    {
        printf("%d ",root->data->key);
        ShowData(root->next);
    }
}
Data* GetData(Node* root,int index)
{
    if(root)
    {
        Node* i = root;
        int j = 0;
        while(i)
        {
            if(j == index)
                return i->data;
            j++;
            i = i->next;
        }
    }
    return NULL;
}
int GetPos(Node* root, Data* data)
{
    //Возвращяет -1 в случае отсутствия элемента или пустого списка
    if(root)
    {
        Node* i = root;
        int j = 0;
        while(i)
        {
            if(i->data->key == data->key)
                return j;
            j++;
            i = i->next;
        }
    }
    return -1;
}
void Clear(Node** root)
{
    if(*root)
    {
        while(*root)
        {
            Node* i = (*root)->next;
            delete (*root)->data;
            delete *root;
            *root = i;
        }
    }
}
void Delete(Node** root,int index)
{
    if(*root)
    {
        if(!index)
        {
            Node* i = (*root)->next;
            delete (*root)->data;
            delete *root;
            *root = i;
        }
        else
        {
            Node* i = * root;
            int j = 0;
            while(i)
            {
                if((j + 1)== index)
                {
                    if(i->next)
                    {
                        Node* tmp = i->next;
                        i->next = i->next->next;
                        delete tmp->data;
                        delete tmp;
                    }
                    break;
                }
                i = i->next;
                j++;
            }
        }
    }
}

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

  1. Структура данных представлена двумя типами: Data и Node. Data содержит поле key, а Node содержит указатель на следующий элемент списка (next) и указатель на элемент данных (data).
  2. Функция Insert добавляет новый элемент списка, используя структуру Node. Если список пуст, то создается новый узел, иначе новый узел добавляется в конец списка.
  3. Функция ShowData проходит по всем элементам списка и выводит значение поля key каждого элемента.
  4. Функция GetData возвращает элемент списка с указанным индексом. Если индекс вне диапазона, то возвращается NULL.
  5. Функция GetPos возвращает позицию элемента в списке с указанным значением поля key. Если элемент не найден, то возвращается -1.
  6. Функция Clear удаляет все элементы из списка.
  7. Функция Delete удаляет элемент списка с указанным индексом. Если индекс равен 0, то удаляется первый элемент списка.

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


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

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

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