Структуры данных: стеки, деки, очереди

Содержание

Слайд 2

Полустатические структуры данных

Полустатические структуры данных характеризуются следующими признаками:
они имеют переменную длину

Полустатические структуры данных Полустатические структуры данных характеризуются следующими признаками: они имеют переменную
и простые процедуры ее изменения;
изменение длины структуры происходит в определенных пределах, не превышая какого-то максимального (предельного) значения.
Если полустатическую структуру рассматривать на логическом уровне, то о ней можно сказать, что это последовательность данных, связанная отношениями линейного списка. Доступ к элементу может осуществляться по его порядковому номеру.
Физическое представление полустатических структур данных в памяти - это обычно последовательность слотов в памяти, где каждый следующий элемент расположен в памяти в следующем слоте (т.е. вектор). Физическое представление может иметь также вид однонаправленного связного списка (цепочки), где каждый следующий элемент адресуется указателем находящемся в текущем элементе. В последнем случае ограничения на длину структуры гораздо менее строгие.

Слайд 3

Стек - такой последовательный список с переменной длиной, включение и исключение элементов

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

Слайд 4

Стек – это структура данных, в которой новый элемент всегда записывается в

Стек – это структура данных, в которой новый элемент всегда записывается в
ее начало (вершину) и очередной читаемый элемент всегда выбирается из ее начала (принцип последний пришел – первым вышел
LIFO: Last Input – First Output)

Слайд 5

Операции, производимые над стеком

включение нового элемента (английское название push - заталкивать);
исключение элемента

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

Слайд 7

Состояния стека: а) пустого; б-г) после последовательного включения в него элементов с

Состояния стека: а) пустого; б-г) после последовательного включения в него элементов с
именами 'A', 'B', 'C'; д, е) после последовательного удаления из стека элементов 'C' и 'B'; ж) после включения в стек элемента 'D'.

Слайд 8

Реализация стека

1. Как статическая структура данных в виде одномерного массива.

Реализация стека 1. Как статическая структура данных в виде одномерного массива.

Слайд 9

Реализация стека

2. Как динамическая структура в виде линейного списка

Реализация стека 2. Как динамическая структура в виде линейного списка

Слайд 10

Работа со стеком на базе массива

Работаем с элементами типа elem.
Type elem =

Работа со стеком на базе массива Работаем с элементами типа elem. Type
<тип элемента стека>;
stack=array[1..100] of elem;
Определить глубину стека величиной n. Будем считать, сто стек пуст при n=0.

Слайд 11

Описание процедур работы со стеками

Добавление элемента в стек
Procedure push (var n:integer; X:

Описание процедур работы со стеками Добавление элемента в стек Procedure push (var
elem; Var s: stack);
Begin
n:= n + 1;
S[n]:= x;
End;

Слайд 12

Описание процедур работы со стеками

Извлечение элемента из стека
Procedure pop (var n:integer; X:

Описание процедур работы со стеками Извлечение элемента из стека Procedure pop (var
elem; Var s: stack);
Begin
x:= S[n];
n:= n -1;
End;

Слайд 13

Работа со стеком на основе линейного списка

type PElement = ^TypeElement; {указатель на

Работа со стеком на основе линейного списка type PElement = ^TypeElement; {указатель
тип элемента}
TypeElement = record {тип элемента списка}
Data: TypeData; {поле данных элемента}
Next: PElement; {поле указателя на следующий элемент}
end;
var ptrHead: PElement; {указатель на первый элемент списка}
ptrCurrent: PElement; {указатель на текущий элемент}

Слайд 14

Запись элемента в стек
procedure PushStack(NewElem: TypeData;
var ptrStack: PElement);
begin

Запись элемента в стек procedure PushStack(NewElem: TypeData; var ptrStack: PElement); begin InsFirst_LineSingleList(NewElem, ptrStack); end;

InsFirst_LineSingleList(NewElem, ptrStack);
end;

Слайд 15

Чтение элемента из стека

procedure PopStack(var NewElem: TypeData, ptrStack: PElement);
Begin
if ptrStack

Чтение элемента из стека procedure PopStack(var NewElem: TypeData, ptrStack: PElement); Begin if
<> nil then
begin
NewElem := ptrStack^.Data; Del_LineSingleList(ptrStack, ptrStack);
end;
end;

Слайд 16

Очистка стека

procedure ClearStack(var ptrStack: PElement);
begin
while ptrStack <> nil do

Очистка стека procedure ClearStack(var ptrStack: PElement); begin while ptrStack nil do Del_LineSingleList(ptrStack, ptrStack); end;
Del_LineSingleList(ptrStack, ptrStack);
end;

Слайд 17

Проверка пустоты стека
function EmptyStack(var ptrStack:PElement): boolean;
begin
if ptrStack = nil then

Проверка пустоты стека function EmptyStack(var ptrStack:PElement): boolean; begin if ptrStack = nil
EmptyStack := true
else EmptyStack := false;
end;

Слайд 18

Задание для самостоятельной работы

Рассмотреть процедуры :
вставки первого элемента списка
InsFirst_LineSingleList;
вставки последующих элементов списка

Задание для самостоятельной работы Рассмотреть процедуры : вставки первого элемента списка InsFirst_LineSingleList;

Ins_LineSingleList;
удаление вершины стека
Del_LineSingleList(ptrStack, ptrStack);
Литература:
1. Ключарев А.А., Матьяш В.А., Щекин С.В. Структуры и алгоритмы обработки данных: Учебное пособие. - СПб.: ГУАП, 2003. - 172 с

Слайд 19

Очередь - это структура данных, представляющая последовательность элементов, образованную в порядке их

Очередь - это структура данных, представляющая последовательность элементов, образованную в порядке их
поступления.
FIFO (First - In - First- Out)
«первым пришел – первым вышел»

Слайд 20

Значение очереди в информатике:
 1) для моделирования реальных очередей - очереди сообщений,

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

Слайд 21

Значение очереди в информатике:
 2) решение собственных задач информатики, в частности в

Значение очереди в информатике: 2) решение собственных задач информатики, в частности в
области операционных систем ЭВМ. Система имеет дело с целой серией запросов к программным и аппаратным ресурсам: запуск и завершение процессов, доступ к какому-нибудь регистру, устройству или файлу (принтеру, консоли оператора и т. д.). Некоторые типы запросов приоритетны по отношению к другим, но однотипные запросы должны удовлетворяться, вообще говоря, в порядке их поступления.

Слайд 22

Очередь - это последовательный список с переменной длиной, в котором включение элементов

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

Слайд 23

Основные операции над очередью
включение,
исключение,
определение размера,
очистка,

Основные операции над очередью включение, исключение, определение размера, очистка, чтение.

чтение.

Слайд 24

Реализация очереди

1. Как статическая структура данных в виде одномерного массива.

Реализация очереди 1. Как статическая структура данных в виде одномерного массива.

Слайд 25

Пример работы c очередью при использовании процедур
maxQ = 5;
R = 0,

Пример работы c очередью при использовании процедур maxQ = 5; R =
F = 1
Условие пустоты очереди R < F (0 < 1)

Слайд 26

Произведем вставку элементов A, B и C в очередь.

Произведем вставку элементов A, B и C в очередь.

Слайд 27

Убираем элементы A и B из очереди.

Убираем элементы A и B из очереди.

Слайд 28

Добавляем элементы D и E:

Добавляем элементы D и E:

Слайд 29

Возникла абсурдная ситуация, при которой очередь является пустой (R < F), однако

Возникла абсурдная ситуация, при которой очередь является пустой (R Убираем элементы С,D и E из очереди.
новый элемент разместить в ней нельзя, так как R = maxQ.

Убираем элементы С,D и E из очереди.

Слайд 30

Предотвратить это возможно:
После извлечения очередного элемента из начала очереди осуществить сдвиг всей

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

Слайд 31

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

С точки зрения экономии вычислительных ресурсов предпочтителен второй способ. Однако усложняется проверка
проверка на пустоту очереди и контроль переполнения очереди – индекс конца очереди не должен «накладываться» на индекс начала.
Пустая очередь представлена очередью, для которой значение R равно нулю.

Слайд 32

Реализация очереди

2. Как динамическая структура в виде линейного списка. Для очереди вводят

Реализация очереди 2. Как динамическая структура в виде линейного списка. Для очереди
два указателя: один - на начало очереди (F), второй- на ее конец (R).

F

R

Слайд 33

Дек – это структура данных, представляющая собой последовательность элементов, в которой можно

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

Слайд 34

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

Дек - особый вид очереди. Дек (от англ. deq - double ended
queue,т.е очередь с двумя концами) - это такой последовательный список, в котором как включение, так и исключение элементов может осуществляться с любого из двух концов списка.
Логическая и физическая структуры дека аналогичны логической и физической структуре кольцевой FIFO-очереди.

Слайд 35


Операции над деком:
добавление элемента в начало;
добавление элемента в конец;
извлечение

Операции над деком: добавление элемента в начало; добавление элемента в конец; извлечение
элемента из начала;
извлечение элемента из конца;
определение размера;
проверка пустоты дека;
очистка.

Слайд 36

Реализация дека как статическая структура данных в виде одномерного массива

Реализация дека как статическая структура данных в виде одномерного массива

Слайд 37

Реализация дека как динамическая структура данных в виде линейного списка

Реализация дека как динамическая структура данных в виде линейного списка
Имя файла: Структуры-данных:-стеки,-деки,-очереди.pptx
Количество просмотров: 74
Количество скачиваний: 1