Структура памяти
Структура данных
К
- множество именА
- множество адресовf:К->А
Возможные задания f
:возможный способ-табличное задание функции:
Операции под таблицей:
Таблица - динамическая структура данных.
Базисное множество - семейство линейных структур из записей, базисное отношение включения определяется операциями вставки и удаления записей.
Варианты расширения понятия таблицы:
Принцип реализации таблиц:
Введение различных способов предполагает явное или неявное существование разных типов ситуаций при использовании таблиц.
Просматриваемые таблицы.
Таблица последовательности строк(записей)
По организации способа доступа таблицы делятся на следующие категории:
В просматриваемой таблице порядок расположения элементов никак не связан со значениями ключей (рис. II-34). Поэтому поиск элемента по ключу осуществляется обычным просмотром всех элементов таблицы, начиная с первого и до искомого
Ключ | Информация |
---|---|
08 | ... |
33 | ... |
47 | ... |
25 | ... |
18 | ... |
рис. II-34
Таким образом, при удалении элемента надо:
Поскольку операция поиска возвращает искомый элемент и не сообщает о месте его размещения в списке, при реализации операции удаления элемента из списка приходится либо
Алгоритм удаления элемента из просматриваемой таблицы-списка по варианту a) приведен на рис. II–39.
Ниже приводится текст программы, соответствующий приведенному алгоритму.
struct Item
{
int key;
Type info;
Item *next;
};
Item *ptab; /*указатель на начало таблицы */
int del1(int k)
{
Item *cur, *prev;
cur = ptab;
/*проверяем, есть ли в таблице элементы */
if(!cur)
return -1; /*таблица пуста – отказ */
/*возможно, требуется удалить первый элемент таблицы */
if(cur->key == k)
{
/* удаляем первый элемент */
ptab = cur->next;
delInfo(cur->info);
delete cur;
return 0;
}
/* ищем удаляемый элемент среди других элементов таблицы */
while(cur->next)
{
/* есть другие элементы */
prev = cur;
cur = cur->next;
if(cur->key == k)
{
/* нашли элемент, который надо удалить */
prev->next = cur->next;
delInfo(cur->info);
delete cur;
return 0;
}
}
/* естественный выход из цикла – в таблице нет элемента с ключом k */
return -1;
}
Дерево является идеально сбалансированным если для каждого его узла количество узлов в левом и правом поддеревьях различаются не более чем на 1. Дерево является сбалансированным,если для каждого узла высота левого и правого поддеревьев различаются не более,чем на 1(АВЛ-деревья). Идеально сбалансированные деревья являются сбалансированными.Операции обработки сбалансированных деревьев имеют сложность log2N.(поиск,вставка,удаление) Тmin=1 Tmax=log2N(при сбалансированном дереве) Tmax=N(при вырожденном дереве)