- •1. Функциональные структуры данных.
- •2.Рекурсивные структуры данных.
- •3.Теоретико-множественные структуры данных.
- •4.Абстрактные типы данных.
- •5.Атд «Список»: основные понятия, типы.
- •6.Линейные списки. Описать алгоритм и написать пример функции создания списка.
- •7.Линейные списки. Описать алгоритм и написать пример функции включения нового элемента в список.
- •8.Линейные списки. Описать алгоритм и написать пример функции исключения элемента из списка.
- •9.Линейные списки. Описать алгоритм и написать пример функции поиска элемента в списке.
- •10.Понятие «очередь».
- •11.Понятие «стек».
- •12.Понятие «дек».
- •13.Обратная польская запись: алгоритм ее составления.
- •15.Двусвязные списки и их свойства.
- •16.Иерархические списки и их свойства.
- •17.Ассоциативные списки и их свойства.
- •18. Атд «Дерево»: основные понятия.
- •19.Двоичные деревья и их свойства.
- •20.Деревья двоичного поиска. Описать алгоритм и написать пример функции добавления узла в дерево.
- •21.Деревья двоичного поиска. Описать алгоритм и написать пример функции обхода узлов дерева.
- •22.Деревья двоичного поиска. Описать алгоритм и написать пример функции поиска узла по его метке.
- •23.Деревья двоичного поиска. Описать алгоритм и написать пример функции удаления узла дерева.
12.Понятие «дек».
Дек – структура, обладающая свойствами очереди и стека. Элементы можно добавлять как в начало, так и в конец списка.
13.Обратная польская запись: алгоритм ее составления.
Если посмотреть внимательно, можно заметить, что операнды в постфиксной форме не меняют своего относительного расположения, а вот порядок следования операций и функций меняется как по отношению к операндам, так и по отношению друг к другу.
Правила перевода следующие
Ввести в стек левую скобку '('
Добавить в конец строки с инфиксным выражением правую скобку ')'
Пока стек не пуст, считываем символы из строки содержащей инфиксное выражение слева направо и выполняем следующие действия.
Если текущий символ в инфиксной строке – левая скобка, помещаем ее в стек.
Если текущий символ в инфиксной строке – правая скобка, извлекаем знаки операций из стека и вставляем их в результирующую строку, до тех пор пока на вершине стека не появиться левая скобка. Извлечь левую скобку и отбросить ее.
Если текущий символ в инфиксной строке – знак операции, извлекаем знаки операций из стека (если они там есть), пока соответсвующее им операции имеют равный или более высокий приоритет по сравнению с текущей операцией, и вставляем извлеченные знаки операций в результирующую строку. Вставим текущий символ в стек.
Если текущий символ в инфиксной строке – цифра, копируем его в результирующую строку.
15.Двусвязные списки и их свойства.
Связанное хранение линейного списка называется списком с двумя
связями или двусвязным списком, если каждый элемент хранения имеет два
компонента указателя (ссылки на предыдущий и последующий элементы линейного списка).
Реализация одного элемента списка
typedef struct node
{
int data;
struct node *next;
struct node *previos;
}ITEM;
Также имеет смысл хранить не только начало списка, но и конец. Объединим эти два указателя в одну структуру головного элемента.
typedef struct head
{
struct node *first;
struct node *last;
}HEAD;
16.Иерархические списки и их свойства.
- это несколько подсписков ранжированных по уровням так, что элементы подсписка уровня 0 являются головным элементом для подсписков уровня 1, и так далее.
Элементы списка имеют компоненты головного элемента подсписка нижележащего.
При реализации нужно учитывать:
кол-во уровней
кол-во разных типов подсписков, расположенных на одном уровне.
Кол-во уровней велико и на каждом уровне могут располагаться несколько типов подсписков.