Классификация структур данных. (Лекция 8) презентация

Содержание

Классификация структур данных По сложности: простые интегрированные По способу представления: физическая логическая По наличию связей между элементами данных: несвязные связные По изменчивости:

Слайд 1Элементарные структуры данных на основе статической памяти.
Лекция 8


Слайд 2Классификация структур данных
По сложности:
простые
интегрированные
По способу представления:
физическая
логическая
По

наличию связей между элементами данных:
несвязные
связные
По изменчивости:
Статические
полустатические
динамические
По характеру упорядоченности элементов в структуре:
линейные
нелинейные
По виду памяти, используемой для сохранности данных:
для оперативной 
для внешней памяти

Слайд 3Список
В математике список (или кортеж) – это конечная последовательность элементов какого-нибудь

множества Ψ.
, где n – количество элементов (длина) списка, xi есть i-й элемент списка (xi ∈ Ψ).
Линейный список


Связный список

Слайд 4Операции с линейным списком
1) Получить значение i-го элемента списка или изменить

i-й элемент;
2) Напечатать элементы списка в порядке их расположения;
3) Найти в списке элемент с заданным значением;
4) Определить длину списка;


5) Вставить новый элемент непосредственно за i-м элементом или перед ним, вставить элемент в пустой список;


6) Удалить i-й элемент;


7) Соединить два линейных списка в один список;
8) Разбить список на два списка;
9) Создать копию списка;
10) Сделать список пустым.



Слайд 5Реализация списков посредством массивов
Линейный список
const
maxlen = … {для

конкретной задачи целое}
type
elemtype = … {для задачи тип элементов};
list = record
elems: array [1..maxlen] of elemtype;
last: integer
end;
var L: list;

procedure make_null(var L: list);
begin
L.last:=0
end;

L.elems[i] - i -й элемент списка


Слайд 6Операция вставки элемента x перед i-м элементом
procedure insert(var L:

list; x: elemtype; i:integer);
var p: integer;
begin
for p:=L.last downto i do
L.elems[p+1]:=L.elems[p];
L.elems[i]:=x;
L.last:=L.last+1;
end;

после 1-го этапа вставки: после 2-го этапа вставки:

3-я компонента свобо-
дна для записи нового
значения

бывшие третий
теперь занимает
четвертую
компоненту

в 3-ей компоненте новое
значение

для вставки элемента в пустой список

make_null(L); insert(L, 9,1):

Для удаления i-го элемента
procedure delete(var L: list; i:integer);
var p: integer;
begin
for p:=i to L.last-1 do
L.elems[p]:=L.elems[p+1];
L.last:=L.last-1
end;

function is_full(var L: list):boolean;
begin
is_full:=L.last=maxlen
end;
function is_empty(var L: list):boolean;
begin
is_empty:=L.last=0
end;
function is_valid(var L: list;i:integer):boolean;
begin
is_valid:=(1<=i) and (i<=L.last)
end;


Слайд 7Поиск элемента X
function is_present(var L: list; x: elemtype):boolean;
var p:integer;

begin
is_present:= false;
p:=1;
while not is_present and (p <= L.last) do
begin
is_present:= x = L.elems[p];
p:= p+1
end;
end;


Слайд 8Связанный список 
Порядок элементов определяется последовательностью ссылок на элементы списка.

type
elem_type =

integer; {тип элемента списка}
elem = record
info: elem_type;
next: byte
end;

list = record
elems: array[1..max_elem] of elem;
first:byte
end;


Слайд 9Создать связный список положительных и отрицательных элементов
const max_elem = 20;
Type


elem_type = integer;
elem = record
info: elem_type; next: byte
end;
list = record
elems:array[1..max_elem] of elem;
first:byte
end;
var t1,t2: list;
r: elem_TYPE;
begin
t1.first := 0; t2.first2 := 0;
repeat
read (r); if r>0 then add_beg(t1, r);
if r<0 then add_beg(t2, r);
until r=0;
writeln(' список положительных элементов:');
trav_info(t1);
writeln(‘список отрицательных элементов:');
trav_info(t2);
end.

procedure add_beg (var t: list; X:elem_type);
var cur:byte;
begin
cur:=t.first+1;
t.elems[cur].info := X;
t.elems [cur].next := first;
t.first := cur
end;

procedure trav_info (var t:list);
var
cur: byte;
begin
cur := t.first;
while (cur <> 0) do
begin write(t.elems [cur].info,' * ');
cur := t.elems [cur].next
end
end;


Слайд 10Удалить элемент с заданным значением
procedure DEL(var t: list; x:elem_TYPE);
var cur:byte;
begin

cur := t.first;
while (cur <> 0) do
begin
if t.elems[cur].info=x then
if cur=first then first:=t.elems [cur].next
else
t.elems [cur+1].next:=t.elems [cur].next;
cur := t.elems [cur].next
end;
end;

Вызов процедуры:
writeln (‘удалить элемент со значением :');
readln(r);
if r>0 then DEL(t1,r);
if r<0 then DEL(t2,r);


Слайд 11Двунаправленный список
0
0
начало
конец
elem = record
info: elem_type;

next, prev : byte;
end;

list = record
elems:array[1..max_elem] of elem;
first, last: byte
end;

0

0

начало

конец

Вставка
L.elems[new_el].next:= L.elems[cur].next;
L.elems[new_el].prev:= L.elems[cur+1].prev;
L.elems[cur].next:=new_el;
L.elems[cur+1].prev:=new_el;

Var L:list;

Удаление
L.elems[cur].next:= L.elems[del].next;
L.elems[L.elems[del].next].prev:= L.elems[del].prev;

cur

new_el

del


Слайд 12Циклический список




Текущий элемент
Текущий элемент
При вставке первого элемента
L.elems[1].next:=1;
2) При вставке i-ого элемента

после текущего
L.elems[i].next:=L,elems[cur].next;
L.elems[cur].next:=i;

Текущий элемент


Слайд 13Стек, очередь, дек
Первым из стека (stack) удаляется элемент, который был помещен

туда последним. Стратегия "последним вошел — первым вышел" (last-in, first-out )

В очереди (queue) всегда удаляется элемент, который содержится в множестве дольше других. Стратегия "первым вошел - первым вышел" (first-in, first-out ).


Слайд 14Стек
Операции, производимые над стеками:
 1) Занесение элемента в стек.
Push(S,x),

где S - идентификатор стека, x - заносимый элемент.
2) Выборка элемента из стека.
Pop(S)
3) Определение пустоты стека.
Empty(S)
4) Прочтение элемента без его выборки из стека.
StackTop(S) эквивалентно x = Pop(Stack) Push(Stack, x).


top

Push (S,5)

5

Push (S,2)

2

Pop (S)

Pop (S)


Слайд 15Реализация стека на базе массива
const
stacksize = … {максимальное число элементов};
type

elemtype = … {тип элементов стека};
stack = record
elems: array [1..stacksize] of elemtype;
top: integer {индекс вершины стека}
end;
var S: stack;

procedure push (var S: stack;x:elemtype);
Begin
S.top:=S.top+1;
S.elems[S.top]:=x
end;

procedure pop (var S: stack; var x:elemtype);
begin
x:=S.elems[S.top];
S.top:=S.top-1;
end;

function Stacktop : integer;
begin
Stacktop := S.elems[S.top];
end;

procedure init_stack (var S: stack);
begin
S.top:=0;
end;

function full_stack(var S: stack):boolean;
Begin
full_stack:=S.top=stacksize
end;

function empty_stack(var S: stack):boolean;
Begin
empty_stack:=S.top=0
end;


Слайд 16Очередь


Очередью FIFO (First In First Out - "первым пришел -

первым вышел” называется такой последовательный список с переменной длиной, в котором включение элементов выполняется только с одной стороны списка (эту сторону часто называют хвостом (tail) очереди), а исключение - с другой стороны (называемой головой (head) очереди).

Для очереди определены три примитивные операции.

Очистка очереди;
Считывание первого элемента очереди; Операция remove(q) удаляет элемент из начала очереди q и присваивает его значение переменной х.
Вставка элемента в конец очереди; Операция insert (q,x) помещает элемент х в конец очереди q.
Проверка, является ли очередь пустой. Третья операция, empty (q), возвращает значение true или false в зависимости от того, является ли данная очередь пустой или нет


Слайд 17Пример реализации очереди в виде одномерного массива
Tail=0
Head=1
A
B
C
Insert(q,A)
Tail=1
Tail=2
Tail=3
Insert(q,B)
Insert(q,C)
Remove(q)
Head=2
Remove(q)
Head=3


Слайд 18Const MaxQ = 100;
Type E = char;
Queue =

record
Elems:Array [1..MaxQ] of E;
Head, tail: integer end;
var
Q: Queue;

Procedure Insert(I: char; var Q: Queue);
begin
Inc(q.tail);
Q.elems[tail]:=I;
end;

Function Empty(Q: Queue): Boolean;
begin
empty:= q.tail end;
 


Procedure Remove(var I: char; Q: Queue);
begin
If Not Empty(Q) then
begin
I:=Q. elems [head];
Inc(head);
end;
end;

Head=3

Tail=n

D


F

C

X = q.elems [1];
For I =1 to q.tail-1
q. elems [I] =q. elems [I+1];
dec(q.tail)

Head=1

Tail=s (s


Слайд 19Организация кольцевой очереди
HEAD=4
TAIL=9
3
5
12
4
10
1
Insert (q,15);
TAIL=1
15
Insert (q,17);
TAIL=2
17


Слайд 20Const size=100;
Type Data= integer;
Queue= record
elems: array[1..SIZE] of data;

tail, head : integer;
end;
Var q:queue;
Procedure QInit; { инициализация }
begin q. tail :=1; q.head:=1; end;
Procedure Qclr; {очистка}
begin q. tail :=q.head; end;
Function QSize : integer;
begin
if q.head <= q. tail then
QSize:=q. tail -q.head
else QSize:=q.tail+SIZE-q.head+1;
end;

Function Insert(a : data) : boolean;
begin
if (Q.tail mod SIZE)+1=Q.head then
insert:=false
else begin
Q.ELEMS[tail]:=a;
Q.tail:=(Q.tail mod SIZE)+1;
Insert:=true;
end;
end;

Function Remove(var a: data) : boolean;
begin
if Q.tail=Q.head then
Remove:=false
else
begin
a:=Q.elems[head];
q.head:=(q.head mod SIZE) + 1;
Remove:=true;
end;
end;


Слайд 21Дек
Дек - особый вид очереди (от англ. deq - double ended

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


Слайд 22Работа дека


Слайд 23Дерево
— это совокупность элементов, называемых узлами и отношений, образующих иерархическую

структуру узлов

Дерево характеризуется следующими признаками:
дерево имеет 1 элемент, на которого нет ссылок от других элементов. Этот элемент называется корнем дерева;
в дереве можно обратиться к любому элементу путем прохождения конечного числа вершин;
каждый элемент дерева связан только с одним предыдущим элементом.

Высота - это количество уровней дерева.
Количество ветвей, растущих из узла дерева, называется степенью исхода узла.



Слайд 25обход в прямом порядке -от корня к левой ветви, затем к

правой;
1 2 3 5 8 9 6 10 4 7
обход в обратном порядке -проходится левая ветвь, затем правая, затем корень
2 8 9 5 10 6 3 7 4 1
симметричный обход - дерево проходится, начиная с левой ветви вверх к корню, затем к правой ветви;
2 1 8 5 9 3 10 6 7 4

2

1

4

5

8

9

10

3

6

7

Способы обхода узлов дерева




Слайд 26Представление дерева
j
A
type
node= record
info: char;
count: integer;

sun: array [1..max] of integer
end;
tree= array [1..max] of node;

j

info

count

sun


Слайд 27Бинарное дерево
– это конечное множество элементов, которое либо пусто, либо содержит

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

Type
node= record
Data: intеger;
Leftsun, rightsun : intеger
End;

BTree= record
Nodes: array [1..maxlen] of node;
First:integer
End;


Слайд 28Основные операции с деревьями
1. Обход дерева.
Обработка корня.
Обработка левой ветви.
Обработка правой ветви.
2.

Удаление поддерева.
Поиск родителя поддерева
Разрыв связи с удаляемым поддеревом
Декремент степени исхода
3. Вставка поддерева.
Определения родителя для нового поддерева
Установка связи с новым поддеревом
Инкремент степени исхода


Слайд 29Двоичное дерево поиска
Оба поддерева — левое и правое, являются двоичными

деревьями поиска.
У всех узлов левого поддерева произвольного узла X значения ключей данных меньше, значения ключа данных самого узла X.
У всех узлов правого поддерева того же узла X значения ключей данных не меньше, значения ключа данных узла X.

Слайд 30Поиск узла с ключом 17





Слайд 31Добавление узла с ключом 42





42


Слайд 32Удаление узла 5


Слайд 33Удаление узла 5


Слайд 34Ку́ча 
— это специализированная структура данных типа дерево , которая удовлетворяет свойству кучи
Значение в

любой вершине не меньше, чем значения её потомков.
Глубина листьев (расстояние до корня) отличается не более чем на 1 слой.
Последний слой заполняется слева направо.
Структура данных для кучи — массив A, где  A[1] — элемент в корне,
потомками элемента A[i] являются A[2i] и A[2i+1] (при нумерации элементов с первого).








Слайд 35Основные операции с кучей
Добавление элемента в кучу
Добавить элемент х в конец

массива h
Восстановление кучи





Слайд 36Основные операции с кучей
Удаление узла из кучи






Слайд 37Основные операции с кучей
Нормализация кучи



Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика