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

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

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

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

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

textual
Листинг программы
  1. struct Data
  2. {
  3.     int key;
  4. };
  5. struct Node
  6. {
  7.     Node* next;
  8.     Data* data;
  9. };
  10. void Insert(Node** root,Data* data)
  11. {
  12.     if(!*root)
  13.     {
  14.         *root = new Node;
  15.         (*root)->next = NULL;
  16.         (*root)->data = data;
  17.     }
  18.     else
  19.     {
  20.         Node* i = *root;
  21.         while(i->next)
  22.             i = i->next;
  23.         i->next = new Node;
  24.         i = i->next;
  25.         i->data = data;
  26.         i->next = NULL;
  27.     }
  28. }
  29. void ShowData(Node* root)
  30. {
  31.     if(root)
  32.     {
  33.         printf("%d ",root->data->key);
  34.         ShowData(root->next);
  35.     }
  36. }
  37. Data* GetData(Node* root,int index)
  38. {
  39.     if(root)
  40.     {
  41.         Node* i = root;
  42.         int j = 0;
  43.         while(i)
  44.         {
  45.             if(j == index)
  46.                 return i->data;
  47.             j++;
  48.             i = i->next;
  49.         }
  50.     }
  51.     return NULL;
  52. }
  53. int GetPos(Node* root, Data* data)
  54. {
  55.     //Возвращяет -1 в случае отсутствия элемента или пустого списка
  56.     if(root)
  57.     {
  58.         Node* i = root;
  59.         int j = 0;
  60.         while(i)
  61.         {
  62.             if(i->data->key == data->key)
  63.                 return j;
  64.             j++;
  65.             i = i->next;
  66.         }
  67.     }
  68.     return -1;
  69. }
  70. void Clear(Node** root)
  71. {
  72.     if(*root)
  73.     {
  74.         while(*root)
  75.         {
  76.             Node* i = (*root)->next;
  77.             delete (*root)->data;
  78.             delete *root;
  79.             *root = i;
  80.         }
  81.     }
  82. }
  83. void Delete(Node** root,int index)
  84. {
  85.     if(*root)
  86.     {
  87.         if(!index)
  88.         {
  89.             Node* i = (*root)->next;
  90.             delete (*root)->data;
  91.             delete *root;
  92.             *root = i;
  93.         }
  94.         else
  95.         {
  96.             Node* i = * root;
  97.             int j = 0;
  98.             while(i)
  99.             {
  100.                 if((j + 1)== index)
  101.                 {
  102.                     if(i->next)
  103.                     {
  104.                         Node* tmp = i->next;
  105.                         i->next = i->next->next;
  106.                         delete tmp->data;
  107.                         delete tmp;
  108.                     }
  109.                     break;
  110.                 }
  111.                 i = i->next;
  112.                 j++;
  113.             }
  114.         }
  115.     }
  116. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы