17.09.2008Стек, очередь, дек1 Структуры и алгоритмы обработки данных, 1 Лекция 4 Линейные СД Стек, очередь, дек.

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



Advertisements
Похожие презентации
Рекурсивная обработка списков1 Структуры и алгоритмы обработки данных, 1 Лекция 3 Рекурсивная обработка списков 1.Представление и реализация.
Advertisements

Реализация списков:динамические структуры ListList clasclas структура одного элемента type LIST = celltype; celltype = record element: eltype; next: LIST.
Деревья1 Структуры и алгоритмы обработки данных, 1 Лекция 6 ДЕРЕВЬЯ (продолжение) 1.Нерекурсивные процедуры обхода бинарных деревьев 2.Представления.
1 Лекция 5 Абстрактные структуры данных. 2 Таблицы Таблица – это набор элементов, содержащих ключ – отличительный признак для поиска элементов, и тело.
Списки Лекция 10. Списки Список – структура данных, представляющая собой конечную последовательность элементов. Элемент списка: Данные Связь.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
В. М. Гуровиц, Очередь – это структура данных, хранящая последовательность элементов и обычно поддерживающая следующие операции: push.
Деревья1 Структуры и алгоритмы обработки данных, 1 Лекция 5 ДЕРЕВЬЯ 1.Определения дерева, леса, бинарного дерева. Скобочное представление 2.Спецификация.
Рекурсивная обработка линейных списков 1 Структуры и алгоритмы обработки данных, 1 Лекция 2 Раздел: Рекурсивная обработка списков Тема Лекции:
Информатика ЕГЭ Уровень А5. Вариант 1 Определите значения переменных a, b, c после выполнения следующего фрагмента программы: a:=5; b:=1; a:=a+b; if a>10.
Двумерные массивы. Задачи обработки двумерных массивов.
Линейные списки – это структура данных, каждый элемент которой связывается со следующим с помощью указателя. Список.
Тема 11 Медицинская помощь и лечение (схема 1). Тема 11 Медицинская помощь и лечение (схема 2)
Массивы Массив используется для обработки упорядоченного набора величин одного типа, обозначенного одним именем. Доступ к элементам массива осуществляется.
Множества. Внутреннее представление.. Механизм внутреннего представления Каждое значение базового типа представляется одним битом. В память заносится.
ЗАПИСЬ ВСПОМОГАТЕЛЬНЫХ АЛГОРИТМОВ НА ЯЗЫКЕ Паскаль НАЧАЛА ПРОГРАММИРОВАНИЯ.
САОД, кафедра ОСУ1 Реализация списков:динамические структуры ListList classclass структура одного элемента type LIST = celltype; celltype = record.
1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ. Глава 5. Системы исполнения функциональных программ.
Денотационная семантика 0 |1|1 | 0 | 1 Mb:Mb: М b ('0') = 0, М b ('1')=1 М b ( '0') = =2 * М b ( ) М b ( 1) = =2 * М b ( ) + 1.
Множественный тип данных Множество в языке Паскаль – это ограниченный набор различных элементов одного (базового) типа, которые рассматриваются как единое.
Транксрипт:

Стек, очередь, дек1 Структуры и алгоритмы обработки данных, 1 Лекция 4 Линейные СД Стек, очередь, дек

Стек, очередь, дек2 Абстракция (модель) последовательности Функции над последовательностями: First, Last, Rest, Lead, Prefix, Postfix Тип последовательности Sequence (El) w = [ x 1, x 2,..., x n ] из элементов x i типа El Для непустых последовательностей (w ): First: Sequence (El) El; First (w) = x 1 ; Last: Sequence (El) El; Last (w) = x n ; Rest: Sequence (El) Sequence (El); Rest (w) = [ x 2,..., x n ]; Lead: Sequence (El) Sequence (El); Lead (w) = [ x 1, x 2,...,x n 1 ].

Стек, очередь, дек3 Наглядная модель

Стек, очередь, дек4 Функции Prefix и Postfix определены для любых последовательностей: Prefix: El Sequence (El) Sequence (El); Postfix: Sequence (El) El Sequence (El); Prefix (x 0, w) = [ x 0, x 1, x 2,..., x n ]; Postfix (w, x) = [ x 1, x 2,..., x n, x ]. Функции First, Rest, Last, Lead селекторы, а функции Prefix и Postfix конструкторы типа Sequence (El) Абстракция (модель) последовательности

Стек, очередь, дек5 Подструктуры Sequence (El) стек (или магазин) Stack First, Rest, Prefix Last, Lead, Postfix очередь (англ. queue) First, Rest, Postfix Last, Lead, Prefix дек (от англ. deq = double-ended-queue, «очередь с двумя концами») First, Rest, Last, Lead, Postfix, Prefix

Стек, очередь, дек6 СД PrefixPostfixFirstLastRestLeadNull deq stack queue Подструктуры Sequence (El)

Стек, очередь, дек7 «Железнодорожные разъезды». Дек First Postfix Last Prefix 123nn – 1 1

Стек, очередь, дек8 «Железнодорожные разъезды». Стек Prefix First Last Postfix

Стек, очередь, дек9 «Железнодорожные разъезды». Очередь First Postfix Prefix Last

Стек, очередь, дек10 Стек (Stack) Синонимы: First = Top, Rest = Pop, Prefix = Push Top верхушка стека, Pop {up} вытолкнуть (вверх), Push {down} – втолкнуть, вжать (вниз)).

Стек, очередь, дек11 Функциональная спецификация (Non_null_stack - множество непустых стеков): 1) Create: Stack (α); 2) Null: Stack (α) Boolean; 3) Top: Non_null_stack (α) α; 4) Pop: Non_null_stack (α) Stack (α); 5) Push: α Stack (α) Stack (α) Формальная спецификация стека из элементов типа α (Stack of α Stack (α)).

Стек, очередь, дек12 Аксиомы (для p: α; s: Stack (α); t: Non_null_stack (α)): A1) Null (Create) = true; A2) Null (Push (p, s)) = false; A3) Top (Push (p, s)) = p; A4) Pop (Push (p, s)) = s; A5) Push (Top (s), Pop (s)) = s. Абстрактный тип Stack (α) фактически (с точностью до обозначений и несущественных деталей) совпадает с типом L_list (α).

Стек, очередь, дек13 Пример 1.s := Push (a, s); 2.s := Push (b, s); 3.s := Pop (s); 4.s := Push (d, s); 5.s := Pop (s); 6.e := Top (s); Top (Pop (Push (d, Pop (Push (b, Push (a, s)))))) = =Top (Pop (Push (d, Push (a, s)))) = =Top (Push (a, s)) = a a b d Top s

Стек, очередь, дек14 Можно определить функцию (процедуру) Pop2, совмещающую результат действия функций Top и Pop: Pop2: Non_null_stack (α) α Stack (α). procedure Pop2 (out p: α; in-out s: Stack (α)); begin p := Top (s);s := Pop (s) end

Стек, очередь, дек15 Procedure Push2 (a: El; var s: Stack); {добавить элемент a в стек s} Procedure Pop2 (var a: El; var s: Stack;); {вытолкнуть элемент из стека s и сохранить его в a} Пусть задано состояние двух стеков s1 = [1] и s2 = [2, 3, 4]. Тогда после выполнения действий While not Null (s2) do begin Pop2 (a, s2); Push2 (a, s1); end состояние стеков есть s1 = [???] и s2 = [???]. s1 = [4, 3, 2, 1] и s2 = [ ]

Стек, очередь, дек16 Функциональная спецификация очереди из элементов типа α (Queue of α Queue (α)) 1) Create: Queue (α); 2) Null: Queue (α) Boolean; 3) First: Non_null_queue (α) α; 4) Rest: Non_null_queue (α) Queue (α); 5) Postfix: Queue (α) α Queue (α)

Стек, очередь, дек17 Аксиомы для очереди ( p: α; q: Queue (α)): A1) Null (Create) = true; A2) Null (Postfix (q, p)) = false; A3) First (Postfix (q, p)) = if Null (q) then p else First (q); A4) Rest (Postfix (q, p)) = if Null (q) then Create else Postfix (Rest (q), p). q p

Стек, очередь, дек18 Пример Функция сцепления двух очередей q1 и q2: Concat (q1, q2) if Null (q1) then q2 else if Null (q2) then q1 else {not Null (q1) & not Null (q2)} Concat (Postfix (q1, First (q2)), Rest (q2)) q1q1q2q2

Стек, очередь, дек19 Реализация стека и очереди Стек: Верхушка стека Начало: Конец: Очередь:

Стек, очередь, дек20 Реализация стека и очереди Mem: n321 Верх x x x x x x... Непрерывная реализация ограниченного стека на базе вектора Для представления стека используется: одномерный массив (вектор) Mem: array [1..n] of α переменная Верх: 1..n

Стек, очередь, дек21 Непрерывная реализация ограниченного стека на базе вектора Для пустого стека Верх = 0. Для целиком заполненного стека Верх = n. Вершина стека доступна как Mem [Верх]. Операция Pop реализуется как Верх:= Верх 1. Операция Push (p, s) как begin Верх:= Верх + 1; Mem [Верх]: = p end при 0 Верх < n. Mem: n321 Верх x x x x x x...

Стек, очередь, дек22 Два стека, ограниченных в совокупности, на базе одного вектора Mem: n321 Верх1 x x x x x x... x x x x x x Стек1 Стек2 Верх2

Стек, очередь, дек23 Непрерывная реализация ограниченной очереди на базе вектора Вектор Mem [1..n] Переменные Начало, Конец: 1..n, идентифицирующие начало и конец очереди Mem: n321 Начало x x x x x x x x Конец

Стек, очередь, дек24 Ситуация, когда последовательность элементов очереди по мере их добавления может выходить за границу вектора, продолжаясь с его начала (вектор имитирует здесь так называемый кольцевой буфер). Непрерывная реализация ограниченной очереди на базе вектора Mem: n321 Конец x x x x x x x x x x x Начало

Стек, очередь, дек25 Двух переменных Начало и Конец недостаточно, чтобы различить в данном представлении два следующих состояния очереди: 1) Начало = Конец + 1 и очередь пуста (рис. а); 2) Начало = Конец + 1 и очередь полна (рис. б). Непрерывная реализация ограниченной очереди на базе вектора Mem: n321 Начало Конец НачалоКонец Mem: n321 x x x x x x x x x x x x x x x x x x x x а б

Стек, очередь, дек26 Простое решение проблемы: введение дополнительной переменной, идентифицирующей состояние очереди, а именно переменной Длина: 0..n. Длина = текущее количество элементов в очереди. Для пустой очереди Длина = 0. Для полной очереди Длина = n. Непрерывная реализация ограниченной очереди на базе вектора

Стек, очередь, дек27 КОНЕЦ ЛЕКЦИИ