- •Системное программное обеспечение (pascal)
- •2. Статические и динамические структуры
- •3. Динамическое размещение данных
- •4. Указатели
- •4.1. Описание указателя.
- •4.2. Выделение динамической памяти.
- •4.3. Задание значения указателю.
- •4.4. Операция разыменования.
- •4.5. Освобождение динамической памяти.
- •4.5.3. Освобождение фрагментов динамической памяти.
- •5. Динамическая структура – список
- •5.1. Линейные списки.
- •5.1.1. Особенности линейных списков.
- •5.1.2. Линейный односвязный список.
- •6.1.2. Основные операции над стеком.
- •7. Обратная польская запись (постфиксная запись) и ее использование
- •7.1. Обратная польская запись.
- •7.2. Метод Дейкстра.
- •7.2.1. Приоритеты операций.
- •7.2.2. Использование стека.
- •II. Контрольные вопросы
- •III. Последовательность выполнения индивидуального задания.
7.2. Метод Дейкстра.
Один из наиболее эффективных методов получения обратной польской записи был предложен в 1960 г. известным голландским ученым профессором Эдсгер Вайб Дейкстра, который основан на использовании стека с приоритетами, позволяющего изменить порядок следования знаков операций в выражении так, что получается обратная польская запись.
Простейший вариант этого метода применим только к простым арифметическим и логическим выражениям, содержащим простые переменные, знаки арифметических и логических операций, знаки операций отношения и круглые скобки.
7.2.1. Приоритеты операций.
Каждому ограничителю, входящему в выражение, присваивается приоритет: для знаков операций приоритеты возрастают в порядке, обратном старшинству операций; скобки имеют низший приоритет.
7.2.2. Использование стека.
Арифметическое или логическое выражение рассматривается как входная строка символов, которая просматривается слева направо; операнды переписываются в выходную строку, а знаки операций помещаются вначале в стек операций: если приоритет входного знака равен нулю или больше приоритета знака, находящегося в вершине стека, то новый знак добавляется к вершине стека; в противном случае из стека выталкивается и переписывается в выходную строку знак, находящийся в вершине, а также следующие за ним знаки с приоритетами, большими или равными приоритету входного знака; затем входной знак добавляется к вершине стека.
II. Контрольные вопросы
Что называется модулем? Когда используется модуль?
В файлах с какими расширениями находятся текст модуля и оттранслированный код модуля? На каком этапе модуль подключается к программе?
Назвать составные части модуля. Какое назначение имеет каждая из частей модуля?
Когда выполняется и в каких случаях используется секция инициализации?
Чем отличается статическая переменная от динамической?
Чем отличается статическая структура от динамической?
Что такое «динамическая память»?
Какие существуют предопределенные переменные для отслеживания состояния кучи?
Что такое «указатель»? Назвать виды указателей.
Как описать типизированный и нетипизированный указатели?
Какие процедуры существуют для выделения динамической памяти?
Как задать значение указателю?
Что такое «операция разыменования»?
Какие процедуры существуют для освобождения динамической памяти?
Для чего используется процедура Mark?
Можно ли использовать одновременно механизм освобождения памяти с помощью процедур FreeMem, Dispose и Release?
Что такое «линейный список»? Какие существуют линейные списки?
Чем отличается линейный двусвязный список от линейного односвязного?
Чем отличаются линейные списки от циклических?
Какие бывают циклические списки?
Какая организация данных называется стеком?
Какие операции возможны над стеком?
Какая организация данных называется простой очередью?
Что представляет собой организация данных «дек»?
Что такое «обратная польская запись»?
В чем заключается метод Дейкстра?