Вывод на экран содержимого списка 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, то удаляется первый элемент списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д