Абстрактный тип данных список. Операции над абстрактным списком Создать пустой список Уничтожить список Определить, пуст ли список Определить количество.

Презентация:



Advertisements
Похожие презентации
Реализация списков:динамические структуры ListList clasclas структура одного элемента type LIST = celltype; celltype = record element: eltype; next: LIST.
Advertisements

Сложные структуры данных Связные списки. Структуры, ссылающиеся на себя struct node { int x; struct node *next; };
Списки Лекция 10. Списки Список – структура данных, представляющая собой конечную последовательность элементов. Элемент списка: Данные Связь.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
ООП Классы Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Основные абстрактные типы данных: списки В математике список представляет собой последовательность элементов определенного типа. Список представляется.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Распределение памяти. Динамическое выделение памяти.
Пусть у нас есть очередь из трех элементов а, в и с, в которую первым был помещен элемент а, а последним элемент с. АВС Esimene Viimane Esimene начало.
Структуры и алгоритмы обработки данных Лекция. Структуры. Связные списки. Заикин Олег Сергеевич zaikin.all24.org.
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
САОД, кафедра ОСУ1 Реализация списков:динамические структуры ListList classclass структура одного элемента type LIST = celltype; celltype = record.
Ассоциативные списки Поиск данных происходит не по индексу или положению объекта, а по его ассоциативной связи: public interface Map { // Доступ к объектам.
Сортировка методом пузырька, выбором (Pascal) Кокарева Светлана Ивановна.
Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич
Древовидная модель оказывается довольно эффективной для представления динамических данных с целью быстрого поиска информации. Деревья являются одними из.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 5 Структуры данных (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем.
ОДНОМЕРНЫЕ МАССИВЫ. В математике, экономике, информатике часто используются упорядоченные наборы данных, например, последовательности чисел, таблицы,
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Транксрипт:

Абстрактный тип данных список

Операции над абстрактным списком Создать пустой список Уничтожить список Определить, пуст ли список Определить количество элементов списка Вставить элемент в указанную позицию списка Удалить элемент, находящийся в указанной позиции списка Просмотреть (извлечь)элемент, находящийся в укзанном месте списка

Терминология Абстрактный список, представляет собой упорядоченный набор элементов, каждый из которых имеет свой номер

Операции над абстрактным Списком CreateList(List) - создает пустой список List DeleteList(List) – уничтожает список List IsEmpty(List) – определяет пуст ли список List Insert(index, NewElement, List) - вставляет новый элемент NewElement в список List на позицию index Remove(index, List) – удаляет элемент списка, находящийся в позиции index

Пример: CreateList(S); Insert(1, data1, S); Insert(2, data2, S); Insert(3, data3, S); Insert(4, data4, S); ……. N=GetLength(S); For (I=1 до N) { Retrive(I, data,s); вывод на печать элемента data }

Операции над абстрактным Списком TypeItem Retrive(index, List) – возвращает элемент, находящийся в позиции index Getlength(List) – возвращает количество элементов в списке List Pos Find(List, Element)- возвращает позицию элемента Element (Pos может быть как номером элемента, так и указателем на некоторый элемент)

Реализация списков Необходимо определить тип элементов и понятия «позиция» элемента: typedef int TypeItem – тип элемента может быть как простым, так и сложным typedef int Pos – в данном случае позицией элемента будет его номер в списке

Реализация АДТ

Реализация списков посредством массивов При реализации с помощью массивов все элементы списка располагаются в смежных ячейках, причем у каждого элемента определен номер. Это позволяет легко просматривать список, вставлять и удалять элементы в начало и в конец списка. Однако, вставка элемента в середину списка потребует от нас сдвинуть все остальные элементы, также как удаление

Однако абстрактный список предусматривает такие операции, которых нет у массива – операция getLenght. Реализация списков посредством массивов

Определяем максимальное количество элементов: define max_list 100;// максимальное число элементов списка

Реализация списков посредством массивов Реализация списка в виде массива

Реализация списков посредством массивов Сдвиг элементов массива для вставки нового элемента списка в третью ячейку

Реализация списков посредством массивов

Каждую операцию АДТ следует реализовывать в виде функции-члена класса. При этом каждой операции понадобится доступ к массиву item и переменной size, в которой хранится длина списка поэтому они должны быть данными-членами одного класса Для того чтобы скрыть массив item и переменную size от клиентов класса, их следует объявить закрытыми Реализация списков посредством массивов

Описываем структуру List: Struct List { TypeItem Items [Max_ list]; //массив элементов списка int last; //индекс следующего элемента }

Реализация списков посредством массивов Void CreateList(List L) { L.last=0;}

Viod Insert(int n,TypeItem NewItem,List L) { if (L.last>=100) cout

Viod Remove(int n, List L) { if (n>L.last || n

Pos Find(TypeItem x, List L) {for (i=n; i

Реализация списков с помощью указателей В данном случае элементы списка не обязательно расположены в смежных ячейках, для связывания элементов используются указатели. Эта реализация освобождает нас с одной стороны от использования непрерывной области памяти Нет необходимости перемещения элементов при вставке или удалении элемента в список. Необходима дополнительная память для хранения указателей.

Реализация связанных списков с помощью указателей информационная часть ссылочная часть – указатель на следующий элемент

Определение структуры List: typedef struct celltype { TypeItem Item;// элемент списка celltype *Next; // указатель на следующий элемент } typedef celltype *list;//

Описания необходимых типов и переменных typedef int Pos;//позицией элемента будет его номер в списке typedef celltype *Pos;// позицией элемента будет указатель на этот элемент

Функции работы со списком Void CreateList(List S)//создание пустого списка { S=new celltype; S->next=NULL; }

void Insert (TypeItem x, Pos n, list S) {list temp, current; temp=S; current=S->Next; Pos i=1; while(current!=0) {if (i==n) {temp=new celltype; temp->Next=current->Next; temp->Item=x; current->Next=temp; break;}

i++; current=current->next; }//end while }//end of insert

void Remove (Pos n, list S) {list current=S->Next, temp; Pos i=1; while(current!=NULL && inext;i++;) if(i==n){ temp=current->next; current->next=current->next->next; delete temp;} }//end

Pos Find (TypeItem x, list S) {list temp; Pos i=1; if (S->Next==NULL) coutNext!=NULL) {if (temp->Item==x) return (i); temp=temp->next;i++;} return (0);} }//end

TypeItem Retrive (Pos n, list S) {list temp; Pos i=1; if (S->Next==NULL) coutNext!=NULL) {if (i==n) return (temp->Item); temp=temp->next;i++;} return (0);} }//end

TypeItem Retrive (Pos n, list S) {list temp; Pos i=1; if (S->Next==NULL) coutNext!=NULL) {if (i==n) return (temp->Item); temp=temp->next;i++;} return (0);} }//end

Сравнение реализаций Реализация списков с помощью массивов требует указания максимального размера массива до начала выполнения программы Если длина списка заренее не известка, более рациональным способом будет реализация с помощью указателей. Процедуры INSERT и DELETE в случае связных списков выполняются за конечное число шагов для списков любой длины.

Сравнение реализаций Реализация списков с помощью массивов расточительна с точки зрения использования памяти, которая резервируется сразу. При использовании указателей необходимо место в памяти для них тоже. При использовании указателей нужно работать очень аккуратно. Поэтому в различных случаях бывают более выгодны одни или другие реализации.

Двусвязные списки Используются в приложениях, где необходимо организовать эффективное перемещение по списку как прямом, так и в обратном направлениях

Двусвязные списки информационная часть указатель на предыдущий элемент указатель на следующий элемент

Описание структуры списка typedef struct celltype { TypeItem Item;// элемент списка celltype *Next; // указатель на следующий элемент celltype *Previous; // указатель на предыдущий элемент } typedef celltype *list;//