Разделы презентаций


л12дин пам06.ppt

Содержание

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

Слайды и текст этой презентации

Слайд 1Динамические структуры данных
Марченко А.И., Марченко Л.А. Программирование

в среде Turbo PASCAL. Базовый курс 7.0. – К.:ВЕК+,1999. –

464 с.

Связанные динамические данные. Списки







Ссылочная переменная - указатель
В простейшем случае элемент динамической структуры данных должен состоять из двух полей: информационного и указательного.

Type
Tptr=^Telem; {ссылка на динамическую
переменную}
Telem = Record
info:integer;
next: Tptr; {указатель}
end;

Использование динамической памяти

Динамические структуры данных   Марченко А.И., Марченко Л.А. Программирование в среде Turbo PASCAL. Базовый курс 7.0.

Слайд 2 Тип указателя на элемент динамической структуры данных может и должен

быть описан перед описанием типа этого элемента.
цепочкой
линейным однонаправленным или

односвязным списком.

Линейные списки – это данные динамической структуры, которые представляют собой совокупность линейно-связанных однородных элементов, для которых разрешены следующие действия:
1) добавление элемента в начало;
2) добавление элемента в конец (хвост) списка (частный случай вставки);
3) вставка элемента между двумя любыми другими элементами;
4) исключение элемента (удаление любого, как крайнего, так и среднего элемента списка).


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

Слайд 3Пр. Создать односвязный список добавлением элементов в его начало
Program spis0b;

{spis0b.pas + с адресами}
Type sv

= ^struct;
Struct = record
key: integer; {ключевое поле}
next: sv {указатель на следующий элемент}
end;
Var
p, t, q: sv;
x: integer;
BEGIN
p := nil; { указатель на начало пуст}
q := nil; { указатель на конец пуст}
writeln('Введите элемент (Число больше 999 - признак конца)');
read(x); {ввод первого элемента}
while x<=999 do

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

Пр. Создать односвязный список добавлением элементов в его началоProgram spis0b;    {spis0b.pas + с адресами}Type

Слайд 4
Результаты: 8 147554 3048
6

147554 3040
4 1475 477512
2

1475477 504
1 0

begin
new(t); { создание нового элемента списка, t - текущее
значение указателя }
t^.key:=x; {заполнение ключевого поля}
if (p=nil) then q:=t; {если это первый элемент, то он же и последний (признак конца)}
t^.next:=p; writeln(' ', longint(t^.next)); { вывод адреса}
p:=t; { writeln(ptr(сегмент,смещение)); p-через Wath }
read(x) ; {ввод очередного элемента}
end; { writeln(' ', seg(t^.next),'+',ofs(t^.next));}
writeln('элемент - адрес');
while t<>nil{не пусто} do
begin {ofs() возвращает смещение адреса объекта типа WORD}
writeln(t^.key:6,' / ', longint(t^.next));
t:=t^.next; { \ нельзя печатать сам указатель}
end;
END.

Результаты: 	8   147554 3048   		6   147554 3040		4   1475 477512

Слайд 5Пример 2. Подсчитать число вхождений буквы 't' в заданное

слово, завершающееся точкой.
Program spis1atp;

{spis1a.pas +}
Type sv {связь}= ^zv; {звено строки}
Zv = record
info: char; {Информационное поле}
next: sv {Указатель на следующий элемент}
end;
Var
P {Ук-ль на начало}, t {Указатель на текущее звено}: sv;
sym: char;
k: integer;
BEGIN {Формирование заглавного звена}
new(p); t:=p; p^.next:=nil; {резервирование памяти}
read(sym); {Чтение первого символа}
Write('Введи остальные символы и точку ');
while sym<>'.' do {Цикл обработки последовательных литер строки}
begin
Пример 2.  Подсчитать число вхождений буквы 't' в заданное слово, завершающееся точкой. Program spis1atp;

Слайд 6

new(t^.next); t:=t^.next; {адрес следующего}

t^.info:=sym; t^.next:=nil;
read(sym)
end; {Исходное слово представлено в виде цепочки}
k:=0;
t:=p; {Подсчет}
while t<>nil do
begin
t:=t^.next ; {}
if t^.info='t' then k:=K+1;
end;
Writeln;
Writeln('Буква t входит в слово ',k,' раз');
END.
new(t^.next); t:=t^.next;    {адрес следующего}

Слайд 7Исключение элемента

Для вставки элемента:
key

next
До занесения

Занесение


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


Исключение элемента Для вставки элемента:key       next До занесения

Слайд 8кольцевыми
Кольцевые списки – это такие t данные, как

и линейные списки, но имеющие дополнительную связь между последним и

первым элементами списка.

Линейный двусвязный (двунаправленный)

кольцевыми  Кольцевые списки – это такие t данные, как и линейные списки, но имеющие дополнительную связь

Слайд 9Вставка
р*
р*

Вставка р*р*

Слайд 10Пример. Пусть необходимо сформировать список следующего вида.
{Создание двусвязного списка

добавлением элементов в начало (конец) списка}
Program spis2а;

{вывод не верен}
Type sv = ^struct;
struct = record
key: integer;
left: sv ; {на предыдущий}
right: sv { на следующий}
end;
Var p,t,q: sv;
x: integer;
BEGIN
p:=nil; q:=nil;
writeln('Введите элемент (Число >999-признак конца)');
read(x);

p=t

q=t

p

Ввели 1 элемент

Ввели 2 элемент

Пример. Пусть необходимо сформировать список следующего вида. {Создание двусвязного списка добавлением элементов в начало (конец) списка}Program spis2а;

Слайд 11while x

new(t); {новый элемент списка}

t^.key:=x; {заполнение ключевого списка}
t^.right:=nil; {это последний элемент, т.к. добавление в конец}
t^.left:=q; {привязывание нового элемента справа(с предыдущим) дадим ему значение признака конца}
writeln(longint(t^.right),' / ',t^.key:6,' \ ', longint(t^.left)); { dispose(t);}
if (p=nil) then p:=t {текущему 1 раз}
else q^.right:=t; {указатель текущем в правое поле}
q :=t; {установка указателя на текущий элемент (последний)}
read(x);
end;
writeln('на левый - элемент - на правый(сегмент + смещение)');
t:=q;
while t<>nil{не пусто} do
begin
writeln(longint(t^.right),' / ',t^.key:6,' / ', longint(t^.left)); { dispose(t);}t:=t^.left;
end
END.
while x

Слайд 12

Результаты:

0 ./ 4 / 1477378048
1477443584 ./ 3 / 1477312512
1477378048 ./ 2 / 1477246976
1477312512 ./ 1 / 0






0 ./ 1 / 1477312512
1477378048 ./ 2 / 1477246976
1477312512 ./ 5 / 0

Ввод:
Тест1: 0 ./ 1 \ 0
0 ./ 2 \ 1477246976
0 / 3 \ 1477312512
0 ./ 4 \ 1477378048
9999

Тест2: 0 ./ 5 \ 0
0 ./ 2 \ 1477246976
0 ./ 1 \ 1477312512
9999


Слайд 13*СЛЕД
*ПРЕД
Очередь







начало
конец
взять
добавить
FIFO (first in-first out). "Первым пришел - первым

ушел".

*СЛЕД*ПРЕД Очередь началоконецвзятьдобавитьFIFO (first in-first out).

Слайд 141) ADDEl(Val) - вставка элемента
2)Удалить из очереди первый элемент
GetDELEl(Var

Val)
Program queue0; {queue0.pas + }
Uses crt;
Type

ptr=^elem;
elem=record
inf:integer;
next: ptr
end;
Var beg_p,t,end_q:ptr;
x: integer;
i: byte;
Procedure ADDEl(val:integer); {Добавление элемента}
Var pt:ptr;
Begin
new(pt);
pt^.inf:=val;
pt^.next:=nil;
if end_q = nil then Beg_p:=pt {если создается первый элемент}
else end_q^.next:=pt; {если создается очередной элемент}
End_q:=pt
End;
1) ADDEl(Val) - вставка элемента 2)Удалить из очереди первый элементGetDELEl(Var Val)Program queue0;    {queue0.pas +

Слайд 15Procedure GetDelEl(Var Val:integer);{удаление}
var pt:ptr;
begin
val:=beg_p^.inf;
pt:=beg_p;

beg_P:=pt^.next;
if Beg_p=nil then end_q:=nil; {если удаляется последний элемент}

dispose(pt)
end;
BEGIN
clrscr;
Beg_p:=nil; end_q:=nil; {Начальная установка указателей}
for i:=1 to 10 do AddEl(i); {Создание очереди из 10 элементов}
{Удаление очереди с распечаткой значений ее элементов}
while Beg_p<>nil do
begin
GetDelEl(x);
writeln('x=',x:4)
end;
END.

Результат
x=1
x=2
x=3
x=4
x=5
x=6
x=7
x=8
x=9
x=10

Procedure GetDelEl(Var Val:integer);{удаление}var  pt:ptr;begin  val:=beg_p^.inf;  pt:=beg_p;  beg_P:=pt^.next;  if Beg_p=nil then end_q:=nil; {если

Слайд 161.Исходное состояние
2. Выделение памяти под первый элемент
3. Занесение информации в

первый элемент
4. Установка указателей на созданный первый элемент
nil
nil

Beg.p
End.q
t

1.Исходное состояние2. Выделение памяти под первый элемент3. Занесение информации в первый элемент4. Установка указателей на созданный первый

Слайд 17Добавление элемента очереди
Исходное состояние
Выделение памяти под новый элемент и занесение

в него информации

t
t^.inf:=5;
p^.next:=nil;
new(t)
Установка связи между последним элементом очереди и новым,

а также перемещение указателя конца на новый элемент

BegP

EndQ







t






Endq^.next:=

EndQ:=t;

Добавление элемента очередиИсходное состояниеВыделение памяти под новый элемент и занесение в него информацииtt^.inf:=5;p^.next:=nil;new(t)Установка связи между последним элементом

Слайд 18стек
LIFO (last in - first out): "последним пришел -

первым ушел".
- ограниченный
глубина стека
- пуст
NIL:
Операции над стеком:


Занесение

Выбор

25

17

30



45

45












стек LIFO (last in - first out):

Слайд 19Создание и удаление стека из 10 элементов
Program stack; stack.pas +
Uses

crt;
Type ptr=^elem; elem=record
inf:integer;
next: ptr
end;
Var
Top:ptr;
x: integer; i:byte;
Procedure

Push(val: integer); {Добавление элемента}
Var pt:ptr;
Begin new(pt); pt^.inf:=val; pt^.next:=Top; Top:=pt
End;
Procedure Pop(Var Val:integer); {Извлечение}
Var pt:ptr;
begin
val:=Top^.inf;
pt:=Top;
Top:=pt^.next; dispose(pt)
end;
Создание и удаление стека из 10 элементовProgram stack;	stack.pas + Uses crt;Type ptr=^elem; elem=record			inf:integer;			next: ptr

Слайд 20BEGIN
clrscr;
Top:=nil; {Начальная установка указателей}
for i:=1 to

10 do Push(i);{Создание стека из 10 элементов}

{Удаление стека с распечаткой значений его элементов}
while Top<>nil do
begin
Pop(x); writeln('x=',x:4)
end
END.


Результаты
x=10
x=9
x=8
x=7
x=6
x=5
x=4
x=3
x=2
x=1

Пусть имеется текст, сбалансированный по круглым скобкам. Необходимо построить таблицу, в каждой строке которой будут находится координаты соответствующих пар скобок, т.е. для текста 15 30
( ... ( ... ) ... ( ... ) ... ) таблица 45 60
0 15 30 45 60 95 0 95

"(", занести ее координату в стек; как только встретится ")", возьмем из стека верхнюю координату

BEGINclrscr;Top:=nil;	     {Начальная установка указателей}for i:=1 to 10 do Push(i);{Создание стека из 10 элементов}

Слайд 21Дек - это симбиоз стека и очереди.








Добавить в

конец
Взять из конца
Добавить в начало
Взять из начала
Конец
Начало
Дерево
корень
листья 1 уровня
листья

2 уровня

листья n уровня














Дек - это симбиоз стека и очереди.  Добавить в конецВзять из концаДобавить в началоВзять из началаКонецНачалоДерево

Слайд 22бинарные
Пирамида
Возрастающая пирамида
Убывающая пирамида
25
37
33
24
21
11
7
0
31
12
17
1
5
10
3
15
2
9
8

бинарныеПирамидаВозрастающая пирамидаУбывающая пирамида 253733242111703112171510315298

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

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

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

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

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


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

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