Динамические структуры данных.pptx
- Количество слайдов: 37
Тип данных определяет допустимое множество значений переменной, набор операций, которые можно применять к таким значениям, а также их способ хранения. Структура данных — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных.
• Оперативная память • ОС и другие программы • Код программы • Область данных программы • Статическая память • Свободная память • Динамическая • память
• Структуры данных • Статические • Динамические • Массив • Стек • Очередь • Строка • Список • Двоичное дерево • и другие
Динамическая структура данных – это структура данных, которая размещается в динамической памяти, ее размер изменяется во время выполнения программы, ее элементы взаимосвязаны друг с другом по какому-либо принципу. Реализуются программистом, на этапе программирования, в виде процедур и функций описываемых самим программистом.
К динамическим структурам данных относятся: • стеки; • очереди; • списки; • кольца; • двоичные деревья; • др. Характеристики любой динамической структуры: • взаимосвязь элементов; • множество базовых операций над этой структурой.
Элемент динамической структуры состоит из двух частей: информационной, ради хранения которой и создается структура и указателей обеспечивающих связь элементов друг с другом. Элемент описывается в виде записи, например: type pnode = ^node; node = record d : word; { информационная } s : string; { часть } point : pnode; { указатель на следующий элемент} end;
Очередь — это упорядоченный набор связанных элементов, которые добавляются к нему с одного конца, а удаляются (выбираются) — с другого конца. Первый элемент в очереди Элемент 1 Элемент 2 … Последний элемент в очереди Элемент n
First In - First Out (FIFO) - первым пришел - первым вышел Первый элемент в очереди Элемент 1 Элемент 2 … Последний элемент в очереди Элемент n
1. Создать очередь (добавить первый элемент). 2. Добавить новый элемент в конец очереди. 3. Удалить элемент из начала очереди. 4. Проверить пуста очередь или нет. ____________________ Все базовые операции реализуются программно в виде процедур и функций описываемых самим программистом.
Опишем очередь, каждый элемент должен хранить фамилию человека. type pnode = ^node; node = record s : string; { фамилия } point : pnode; { указатель на следующий элемент} end; var beg, fin: pnode; { указатели на начало, конец очереди} El: string; { фамилия }
procedure first(var beg, fin: pnode; el: string); {указатели на начало и конец очереди, информационная часть элемента очереди} begin new(beg); beg^. s: =el; beg^. point : =nil; fin: =beg; end;
Procedure Add(el: string; var fin: pnode); var p : pnode; begin new(p); p^. s: =el; p^. point : = nil; fin^. point: =p; fin: =p; end;
Procedure Del(Var beg: pnode; var el: string); var p : pnode; Begin el: =beg^. s; p: =beg; beg: =beg^. point; dispose(p); end;
Признаком пустой очереди является неопределенное значение указателя на начало очереди: if beg=nil then … При добавлении элемента в очередь и удалении элемента из очереди следует проверять наличие элементов в ней.
BEGIN First(Beg, Fin, 'Иванов'); Add('Петров', Fin); Add('Сидоров', Fin); Del(Beg, El); Writeln('Следующий Add('Васечкин', Fin); Add('Васильев', Fin); Del(Beg, El); Writeln('Следующий END. ', El); ', El);
Repeat Writeln('1 - добавить; 2 - удалить; 3 - выход'); Readln(n); case n of 1: begin … if Beg=Nil then First(Beg, Fin, el) else Add(El, Fin); end; 2: if Beg<>Nil then begin Del(Beg, El); … end else begin Writeln('Очередь пуста'); … end; until n=3;
В программировании очереди применяются очень широко — например, при моделировании, буферизованном вводевыводе или диспетчеризации задач в операционной системе. Примером может служить организация событий в Windows: 1) Пользователь оказывает какое-то действие на приложение; 2) Приложение посылает сообщение операционной системе о запросе на выполнение соответствующей процедуры; 3) Соответствующая процедура в операционной системе не вызывается, т. к. в этот момент она совершает другие действия: 4) Сообщение ставится в очередь; 5) Когда будут обработаны сообщения, пришедшие ранее, операционная система выполнит необходимое действие.
Стек — упорядоченный набор связанных элементов, которые добавляются к нему и удаляются из него только с одного конца (вершины стека).
Last In — First Out (LIFO) - последним пришел - первым вышел.
1. Добавление элемента в стек (проталкивание - push), возможно только в вершину стека при этом добавленный элемент становится первым сверху. 2. Удаление элемента (выталкивание - pop) — возможно также только из вершины стека, при этом элемент находящийся ниже вершины стека становится верхним, значение вершины изменяется. 3. Проверка является ли стек пустыми — анализируется значение вершины стека. ____________________ Все базовые операции реализуются программно в виде процедур и функций описываемых самим программистом.
type pnode = ^node; node = record s : string; { фамилия } point : pnode; { указатель на следующий элемент} end; var top: pnode; { указатель на вершину стека} El: string; { фамилия }
function push(top: pnode; var p : pnode; begin new(p); p^. s: =el; p^. point: =top; push: =p; end; el: string ): pnode;
function pop(top: pnode; var el: string): pnode; var p : pnode; begin el: =top^. s; pop: =top^. p; dispose(top); end;
Признаком пустого стека является неопределенное значение указателя вершины стека: if top=nil then … __________________ Выталкивать элементы из стека следует предварительно проверив значение указателя вершины стека.
begin top : = nil; for i : = 1 to 4 do begin write(' vvedite фамилию '); readln(el); top: = push(top, el); end; writeln('------'); for i : = 1 to 4 do begin {if top<>nil then begin } top: = pop(top, el); writeln(el); { end else writeln('стек пуст')}; end.
Стеки широко применяются в вычислительной технике. Например, для отслеживания точек возврата из подпрограмм используется стек вызовов, который является неотъемлемой частью архитектуры большинства современных процессоров. Языки программирования высокого уровня также используют стек вызовов для передачи параметров при вызове процедур.
1. Решение задачи сводится к анализу строки, содержащей следующую формулу: 2. Если проигнорировать все символы кроме скобок задача сводится к анализу строки: (()(()()(((()))()))))(()()()()())))
Динамическая структура данных – это структура данных, которая размещается в динамической памяти, ее размер изменяется во время выполнения программы, ее элементы взаимосвязаны друг с другом по какому-либо принципу. Реализуются программистом, на этапе программирования, в виде процедур и функций описываемых самим программистом.
Очередь — это упорядоченный набор связанных элементов, которые добавляются к нему с одного конца, а удаляются (выбираются) — с другого конца. Первый элемент в очереди Элемент 1 Элемент 2 … Последний элемент в очереди Элемент n First In - First Out (FIFO) - первым пришел - первым вышел
1. Создать очередь (добавить первый элемент). 2. Добавить новый элемент в конец очереди. 3. Удалить элемент из начала очереди. 4. Проверить пуста очередь или нет.
Стек — упорядоченный набор связанных элементов, которые добавляются к нему и удаляются из него только с одного конца (вершины стека). Last In — First Out (LIFO) - последним пришел - первым вышел.
1. Добавление элемента в стек (push) 2. Удаление элемента (pop) 3. Проверка является ли стек пустыми
Динамические структуры данных.pptx