Стек (Stack, Pinu, LIFO) Стек является одной из наиболее используемых и наиболее важных структур данных. Стеки применяются очень часто: Stekke kasutatakse.

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



Advertisements
Похожие презентации
Работа с динамической очередью. Dünaamiline järjekord.
Advertisements

Реализация стеков с помощью массивов. Pinu realisatsioon massiivi abil.
Распределение памяти. Динамическое выделение памяти.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Древовидная модель оказывается довольно эффективной для представления динамических данных с целью быстрого поиска информации. Деревья являются одними из.
Структуры и алгоритмы обработки данных Лекция. Структуры. Связные списки. Заикин Олег Сергеевич zaikin.all24.org.
Двумерные динамические массивы. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор.
Д.з Язык С++ - занятие 31. Задача 1: 1/1 + 1/3 + 1/5 … #include using namespace std; int main() { int n; cin >> n; double sum = 0;// Сумма for.
Списки Лекция 10. Списки Список – структура данных, представляющая собой конечную последовательность элементов. Элемент списка: Данные Связь.
Реализация списков:динамические структуры ListList clasclas структура одного элемента type LIST = celltype; celltype = record element: eltype; next: LIST.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Лабораторная работа 4. Подпрограммы. Задание на лабораторную работу Написать программу, реализующую хранение информации, указанной в вариантах индивидуальных.
МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
Абстрактный тип данных список. Операции над абстрактным списком Создать пустой список Уничтожить список Определить, пуст ли список Определить количество.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Транксрипт:

Стек (Stack, Pinu, LIFO) Стек является одной из наиболее используемых и наиболее важных структур данных. Стеки применяются очень часто: Stekke kasutatakse väga tihti: -Распознавание синтаксиса в компиляторе (kompilaatori süntaksi hindamine) -Оценка выражений (avaldise hindamine) -Передача параметров функциям (funktsioonide parameetrite edastamine) -Выполнение вызова функции (funktsioonide väljakutsumine) -Возврат из функции (tagastamine funktsioonidest)

Стек предназначен для хранения элементов, доступных естественным путём в вершине стека, например: Стопка подносов (kandikud pakis) Груда тарелок (taldrikud pakis) Шампур с нанизанными овощами (šašlõkivarras juurviljadega) Oперации со стеком: (operatsioonid stekiga) - добавляющие (Push) lisamine - удаляющие / извлекающие (Pop) eemaldamine/kustutamine. Kогда стек достигает максимального количества элементов, наступает ситуация полноты стека (stack full) – в случае использования массивов. Другая крайность – нельзя взять поднос с пустой полки. Условие пустого стека (stack empty) подразумевает, что нельзя удалить\извлечь элемент.

А A B A B C A B A A D Push APush BPush CPop Push D Помещение в стек и извлечение из стека. Lisamine ja kustutamine stekist. C B

Объявление объекта типа Stack. Steki deklareerimine. struct Solm { info;//andmed Solm *next;//järgmise elemendi aadress }; Каждый элемент стека состоит из 2-х полей: информационного и адресного данные Адрес следующего узла данные Адрес следующего узла sõlm

Указатель на вершину стека. Tipu steki viit. Solm *Esim; Esim Sõlm

Создание пустого стека. Tühja steki koostamine. Esim=NULL; //stekk on tühi NB! NULL – это не нулевой адрес, а отсутствие конкретного адреса памяти. NULL on mälu aadressi puudumine.

Добавление первого элемента в стек. Esimese elemendi lisamine. Р NULL andmed Esim p=new Solm; //mälu esiletõstmine p->info=andmed; //kirjutame andmed p->next=NULL; //järgmine puudub Esim=p; //tipu stekiks saab uus element

Добавление следующего элемента. Järgmise elemendi lisamine. P =new Solm; p->info=andmed; //kirjutame andmed p->next=Esim; //järgmine on kunagine element Esim=p; //esimene sai uueks elemendiks NULL andmed Р Esim

Удаление элемента из вершины стека. Elemendi kustutamine steki tipust. NULL Esim p=Esim; //viit p teab esimese elemendi aadressi Esim=p->next; //tipu element on järgmine element delete p; //kustutada element p

Пример применения стека. Steki/Pinu kasutamise näidis. Выражение(avaldis) -8 + (4 * ^2) / 3 cодержит(sisaldab): Унарный (unaarne) оператор – (минус) Бинарные (binaarsed) операторы +, *, /, ^(степень/aste) Операнды(operandid) 8, 4, 12, 5, 2, 3 Круглые скобки (sulud)

Пример применения стека (продолжение). Выражение записывается в инфиксной (infix) форме, если каждый бинарный оператор помещается между его операндами и каждый унарный оператор предшествует его операнду. Avaldis on infix vormis, kui binaarne operaator asub operantide vahel, ning unaarne operaator asub operantide ees. Например, выражение * 2 является инфиксным. Avaldis * 2 on infix vormis.

Инфиксное выражение вычисляется алгоритмом, который использует два стека для различных типов данных. Infix avaldist arvutatakse algoritmi abil, mis kasutab kahte stekki. Пример применения стека. 1.Для хранения операндов (operantide hoidmiseks); 2. Для хранения операторов (operaatori hoidmiseks).

Альтернативой рассмотренной форме является постфиксное (postfix) представление, в котором операнды предшествуют оператору. Kui operandid eelnevad operaatorile, siis avaldis on postfix vormis. Например, инфиксное выражение «А+В» записывается в постфиксной форме как «А В +». Näiteks, infix avaldis «А+В» on postfix vormis «А В +». infix: a+b*c=a+(b*c) postfix: a b c * + Пример применения стека.

А * В + С Стек 1 Стек 2 А * В * + С + АВ*С+

Пример применения стека. A * B + C A B * C + A * B * C *D *E *F A B * C * D * E * F* A + (B * C + D) / E A B C * D + E / + (B*B–4 *A*C)/(2*A) B B * 4 A * C * – 2 A * / Infix Postfix В постфиксной форме переменные и числа вводятся по мере их появления, а оператор – там, где имеются 2 его операнда.

Постфиксное выражение оценивается алгоритмом, который просматривает выражение слева направо и использует стек. Читаем каждый терм и в зависимости от его типа выполняем действия. Инфиксное выражение 4+3*5 записывается в постфиксной форме как *+ Push 4 4 Push Push Pop 4 5*3=15 Pop 15+4=19

Как работает электронный калькулятор? Kuidas töötab kalkulaator? Пользователь вводит математическое выражение с числами (операндами) и операторы. Kasutaja sisestab avaldis numbritega ja tehted. Калькулятор использует один стек для вычисления числовых результатов. Kalkulaator kasutab ühte stekki tulemuste avaldamiseks.

Описание программы, реализующей работу со стеком. Programmi kirjeldamine. Функции (funktsioonid): -Добавление элемента в вершину стека(lisamine) -Удаление элемента из вершины стека(eemaldamine) -Удаление всех элементов из стека с освобождением памяти(kõikide elementide eemaldamine) - Вывод на экран содержимое стека(väljastamine ekraanile) Main() : инициализация вершины стека, вызов функций (steki tipu initsialiseerimine, funktsioonide väljakutsumine)

Добавление элемента в вершину стека. Elemendi lisamine. void Push( ); Функция получает в качестве параметра значение нового элемента и сохраняет его в вершине стека. Funktsioon kirjutab oma parameetri steki tippu.

p=new Solm; //malu uuele elementile int andmed;//muutuja coutandmed; //kui lisame esimene element if (Esim==NULL) { p->info=andmed; // p->next=NULL;//jargmine puudub Esim=p; //Esim teab nuud aadres //1.elem } else //kui stekkis on juba elementid { p->info=andmed; p->next=Esim; Esim=p; //uus element on esimene stekkis }

Удаление элемента из вершины стека. Elemendi eemaldamine steki tipust. Pop (); Функция удаляет элемент из вершины стека и возвращает значение этого элемента главной функции main(). Funktsioon eemaldab elemendi steki tipust.

if (Esim!=NULL) { //eemaldame 1.elem tipust u=Esim; Esim=u->next; delete u; } else cout

Удаление всех элементов из стека с освобождением памяти. Kõikide elementide eemaldamine void ClearStack(); В цикле пока стек не опустеет удаляются все его элементы и указатель на вершину стека получает значение NULL. Tsüklis eemaldatakse kõik elemendid kuni stekis on elemendid.

Вывод на экран всех элементов, содержащихся в стеке. Ekraanile väljastamine. void PrintStack(); Функция в цикле просматривает весь стек и выводит на экран значения поля info в каждом узле стека. Funktsioon analüüsib kogu stekki ja väljastab ekraanile info andmed igas steki sõlmes.

if (Esim!=NULL { u=Esim; cout info next!=NULL) { u=u->next; cout info

Задания. Ülesanded. 1.Составить программу, реализующую работу со стеком. Koostada programm, mis realiseerib töö stekiga. 2. Составить программу, моделирующую работу постфиксного калькулятора, имеющего операторы +, -, *, / и ^ (возведение в степень). Калькулятор принимает данные с плавающей точкой и вычисляет выражения. Koostada programm, mis modeleerib postfix kalkulaatori tööd, kasutades tehteid +, -, *, / ja ^ (astmed). Kalkulaator võtab vastu kümnendmurru andmed ja arvutab avaldised.