Вывод на экран содержимого списка 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++;
- }
- }
- }
- }
Объяснение кода листинга программы
- Структура данных представлена двумя типами:
Data
иNode
.Data
содержит полеkey
, аNode
содержит указатель на следующий элемент списка (next
) и указатель на элемент данных (data
). - Функция
Insert
добавляет новый элемент списка, используя структуруNode
. Если список пуст, то создается новый узел, иначе новый узел добавляется в конец списка. - Функция
ShowData
проходит по всем элементам списка и выводит значение поляkey
каждого элемента. - Функция
GetData
возвращает элемент списка с указанным индексом. Если индекс вне диапазона, то возвращаетсяNULL
. - Функция
GetPos
возвращает позицию элемента в списке с указанным значением поляkey
. Если элемент не найден, то возвращается -1. - Функция
Clear
удаляет все элементы из списка. - Функция
Delete
удаляет элемент списка с указанным индексом. Если индекс равен 0, то удаляется первый элемент списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д