Скачать презентацию ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ Стек Стек упорядоченный Скачать презентацию ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ Стек Стек упорядоченный

3_Динамические структуры данных_Стеки.ppt

  • Количество слайдов: 13

ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ

Стек Стек

Стек –упорядоченный набор элементов, в котором добавление новых элементов и удаление существующих производится с Стек –упорядоченный набор элементов, в котором добавление новых элементов и удаление существующих производится с одного конца, называемого вершиной стека. 5 4 3 2 1

Стек Особенности стека 1. 2. 3. 4. В любой момент доступен только один элемент Стек Особенности стека 1. 2. 3. 4. В любой момент доступен только один элемент – верхний Извлекать (удалять) элементы из стека можно только в порядке обратном порядку добавления (первый пришел -последний ушел) LIFO (last in – first out) Другие операции со стеком не определены. При выборке элемент исключается из стека. Примеры стека: 1. Детская пирамидка 2. Мозг человека при решении задачи 3. Процесс входов и выходов в подпрограммы

Стек Особенности стека Для реализации стека используют линейный список, т. е стек это список, Стек Особенности стека Для реализации стека используют линейный список, т. е стек это список, в котором добавление и удаление элементов происходит с начала (или с конца) списка. Значение указателя- ссылка на вершину стека. Каждый элемент содержит поле ссылки. Описание стека: Type EXST=^ST; ST=Record Data: Integer; Next: EXST; End; Var Stack: EXST; {текущая переменная}

Стек Операции со стеками. 1. Занесение в стек. Аналогично вставке элемента в начало списка. Стек Операции со стеками. 1. Занесение в стек. Аналогично вставке элемента в начало списка. Процедура записи в стек Procedure Write. Stack (var u: EXST; digit: Integer); Begin New(x); {создание нового элемента стека} X^. Data: =digit; X^. Next: =u; {созданный элемент – вершина стека} u: =x; End;

Стек Операции со стеками. 1. Занесение в стек. Основная программа формирования стека Var Stack: Стек Операции со стеками. 1. Занесение в стек. Основная программа формирования стека Var Stack: EXST; digit: Integer; Begin Stack: =Nil; Write. Ln(‘Введите элементы стека. Окончание ввода – 0’); Read (Digit); While Digit <> 0 Do Begin Write. Stack (Stack, Digit); Read(digit); End.

Стек Операции со стеками. 2. Извлечение из стека. В результате извлечения некоторой переменной I Стек Операции со стеками. 2. Извлечение из стека. В результате извлечения некоторой переменной I должно быть присвоено значение первого элемента стека и изменено значение указателя на начало списка. Процедура извлечения Procedure Read. Stack (var u: EXST; digit: Integer); Var x: EXST; Begin i: =u^. Data; x: =u; u: =u^. Next; Dispose(x); End;

Надо проверять пуст ли стек, т. е. разработать функцию: Function Free(u: EXST): Boolean; ¡ Надо проверять пуст ли стек, т. е. разработать функцию: Function Free(u: EXST): Boolean; ¡

Стек Примеры использования стека Программа проверки своевременности закрытия скобок 1 Определяем стек: элементы – Стек Примеры использования стека Программа проверки своевременности закрытия скобок 1 Определяем стек: элементы – символы. Type EXST=^ST; ST=Record Data: Char; Next: EXST; End; 1. 2. 3. 4. Будем двигаться по строке A: String до конца. Если встретим ({[ - заносим в стек. Если встретим ]}) – удаляе При несоответствии – сообщение об ошибке. Факт ошибки хранится в f: False While (i<> Length (a)) and f Do … 5. Проверка «нужной» скобки – коды скобок { } 123 -125 [ ] 91 -93 ( ) 40 -41, т. е. If Ord(a[i]) – Ord(stack^. data))<=2 Then…

Стек Примеры использования стека 2 Вычисление значения выражения представленного в обратной польской записи Обычная Стек Примеры использования стека 2 Вычисление значения выражения представленного в обратной польской записи Обычная запись Обратная польская запись (b+c)*d bc+d* a+(b+c)*d abc+d*+ Т. е. просматривая строку, анализируем. Если это: - число, то записываем его в стек; - знак, то, достаем два элемента из стека, выполняем математическую операцию, и заносим результат в стек. **Процедура VAL(s, x, k), преобразует символьное представление числа S в соответствующее числовое значение. При этом, если k=0 – преобразование возможно.

Стек Примеры использования стека 3 Программа преобразования обычной формы записи арифметического выражения в обратную Стек Примеры использования стека 3 Программа преобразования обычной формы записи арифметического выражения в обратную польскую запись Обра тная по льская нота ция (ОПН) = Обратная польская запись = Обратная бесскобочная запись (ОБЗ) = Постфиксная нотация = Бесскобочная символика Лукашевича = Польская инверсная запись = ПОЛИЗ — форма записи математических выражений, в которой операнды расположены перед знаками операций. Самостоятельно!

Стек Обратная польская запись ((1 + 2) * 4) + 3 - обычная 1 Стек Обратная польская запись ((1 + 2) * 4) + 3 - обычная 1 2 + 4 * 3 + польская Ввод Операция 1 поместить в стек 2 поместить в стек + сложение 4 поместить в стек * умножение 3 поместить в стек + сложение Стек 1 1, 2 3 3, 4 12 12, 3 15