Algorytmy i Struktury Danych.

Podobne dokumenty
Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Struktury danych: stos, kolejka, lista, drzewo

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

Algorytmy i Struktury Danych.

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Dynamiczne struktury danych

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych

Programowanie i struktury danych 1 / 44

Odwrotna Notacja Polska

E S - uniwersum struktury stosu

Podstawy informatyki 2

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Programowanie obiektowe

Wykład 6. Dynamiczne struktury danych

TRANSLACJA I TRANSLATORY

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Abstrakcyjne struktury danych w praktyce

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Marcin Matusiak i Łukasz Stasiak

Struktury danych (I): kolejka, stos itp.

Programowanie Proceduralne

Algorytmy i Struktury Danych.

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Stos LIFO Last In First Out

Wstęp do programowania


Podstawowe algorytmy i ich implementacje w C. Wykład 9

KOLEJKA (QUEUE) (lista fifo first in, first out)

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Wstęp do programowania

Algorytmy i Struktury Danych

Podstawowe struktury danych

Listy, kolejki, stosy

ZASADY PROGRAMOWANIA KOMPUTERÓW

Dynamiczne struktury danych

Podstawy programowania skrót z wykładów:

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

Algorytmy i Struktury Danych.

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

INFORMATYKA DANE.

Struktury Danych i Złożoność Obliczeniowa

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Struktury danych. przez użytkownika, jak to ma miejsce w przypadku zwykłych zmiennych statycznych.

Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska

Algorytmy i Struktury Danych.

Wstęp do Programowania 2

Algorytmy i Struktury Danych

Wstęp do programowania

Programowanie i struktury danych

Wykład 4. Klasa List Kolejki Stosy Słowniki

STL: Lekcja 1&2. Filozofia STL

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

Lista, Stos, Kolejka, Tablica Asocjacyjna

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

tablica: dane_liczbowe

Wstęp do programowania. Wykład 1

Wstęp do Informatyki

Programowanie Procedurale

Kurs programowania. Wykład 9. Wojciech Macyna

Wstęp do programowania. Stosy i kolejki. Piotr Chrząstowski-Wachtel

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Algorytmy i Struktury Danych.

Kurs II, zajęcia 1. Tomasz Kulczyński, Błażej Osiński, Wojciech Śmietanka. Stos, kolejka i lista. Stos. Kolejka. Lista dwukierunkowa

DYNAMICZNE PRZYDZIELANIE PAMIECI

Struktury. Przykład W8_1

Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska.

dr inż. Paweł Myszkowski Wykład nr 11 ( )

Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Część 4 życie programu

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Podstawy Programowania

Projektowanie klas c.d. Projektowanie klas przykład

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Algorytmy i Struktury Danych.

Rekurencja. Przygotowała: Agnieszka Reiter

Wykłady opracowane zostały w oparciu o materiały prof. dr hab. Jerzego Weresa. Poznań 2009/2010 Algorytmy i struktury danych Krzysztof Nowakowski 2

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Programowanie i struktury danych

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Algorytmy. Paweł Dudzik, Adrian Guzik. Kraków, 6 lipca AGH Kraków. Paweł Dudzik, Adrian Guzik (AGH Kraków) Algorytmy Kraków, 6 lipca / 37

Abstrakcyjne struktury danych - stos, lista, drzewo

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Informatyka 2. Wykład nr 2 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Algorytmy i struktury danych. wykład 5

Przykładowe B+ drzewo

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Listy powiązane zorientowane obiektowo

Transkrypt:

Algorytmy i Struktury Danych. Abstrakcyjne struktury danych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 1 / 47

Plan Motywacja Abstarkcyjne struktury danych Liniowe struktury danych Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 2 / 47

Plan Motywacja Motto Abstarkcyjne struktury danych Liniowe struktury danych Struktury danych modyfikuja świat, w którym realizowany jest algorytm, usprawniaja działanie, ułatwiaja zrozumienie algorytmu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 2 / 47

Motywacja 2 0 5 3 4 1 Do tej pory zajmowaliśmy się tylko jednym typem struktur danych: tablicami (jedno-i wielowymiarowymi). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 3 / 47

Motywacja 2 0 5 3 4 1 Do tej pory zajmowaliśmy się tylko jednym typem struktur danych: tablicami (jedno-i wielowymiarowymi). Ich długość się nie zmienia, a zatem jest to statyczna struktura danych. To oznacza, że albo konieczna wielkość tablicy jest znana z góry, albo tracimy ogromna ilość pamięci. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 3 / 47

Motywacja 2 0 5 3 4 1 Do tej pory zajmowaliśmy się tylko jednym typem struktur danych: tablicami (jedno-i wielowymiarowymi). Ich długość się nie zmienia, a zatem jest to statyczna struktura danych. To oznacza, że albo konieczna wielkość tablicy jest znana z góry, albo tracimy ogromna ilość pamięci. W wielu przypadkach chcemy mieć dynamiczna strukturę danych, której długość zmienia się zgodnie z potrzebami. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 3 / 47

Motywacja 2 0 5 3 4 1 3 2 0 5 4 1 Do tej pory zajmowaliśmy się tylko jednym typem struktur danych: tablicami (jedno-i wielowymiarowymi). Ich długość się nie zmienia, a zatem jest to statyczna struktura danych. To oznacza, że albo konieczna wielkość tablicy jest znana z góry, albo tracimy ogromna ilość pamięci. W wielu przypadkach chcemy mieć dynamiczna strukturę danych, której długość zmienia się zgodnie z potrzebami. Z tego też powodu, potrzebujemy struktury, która pozwala na przechowywanie elementów w fizycznie różnym porzadku. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 3 / 47

Struktury danych Struktury danych, sa zaawansowanymi pojemnikami na dane, które gromadza je i układaja w odpowiedni sposób. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 4 / 47

Struktury danych Struktury danych, sa zaawansowanymi pojemnikami na dane, które gromadza je i układaja w odpowiedni sposób. Ich różnorodność jest ogromna, a dla każdej znaleziono wiele zastosowań oraz interesujacych algorytmów. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 4 / 47

Struktury danych Struktury danych, sa zaawansowanymi pojemnikami na dane, które gromadza je i układaja w odpowiedni sposób. Ich różnorodność jest ogromna, a dla każdej znaleziono wiele zastosowań oraz interesujacych algorytmów. Powszechnie spotykane jest używanie struktur danych do przetwarzania informacji zgromadzonych w innych strukturach. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 4 / 47

Struktury danych Struktury danych, sa zaawansowanymi pojemnikami na dane, które gromadza je i układaja w odpowiedni sposób. Ich różnorodność jest ogromna, a dla każdej znaleziono wiele zastosowań oraz interesujacych algorytmów. Powszechnie spotykane jest używanie struktur danych do przetwarzania informacji zgromadzonych w innych strukturach. Struktury danych sa fundamentalnym narzędziem programisty i ich znajomość jest niezbędna. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 4 / 47

programy = algorytmy + struktury danych Uczac się algorytmiki nie wolno zapomnieć o strukturach danych!!! Informatyk szwajcarski, profesor Niklaus Wirth (twórca języka Pascal i Modula-2). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 5 / 47

Abstrakcyjna struktura danych a struktura danych Abstrakcyjna struktura danych (ASD), to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 6 / 47

Abstrakcyjna struktura danych a struktura danych Abstrakcyjna struktura danych (ASD), to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji. Jaka jest różnica pomiędzy struktura danych a abstrakcyjna struktura danych? Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 6 / 47

Abstrakcyjna struktura danych a struktura danych Abstrakcyjna struktura danych (ASD), to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji. Jaka jest różnica pomiędzy struktura danych a abstrakcyjna struktura danych? Struktura danych jest pewna implementacja konkretnej abstrakcyjnej struktury danych przeznaczonej do pracy na konkretnym komputerze (chodzi o jego architekturę) i systemie operacyjnym. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 6 / 47

Abstrakcyjna struktura danych a struktura danych Abstrakcyjna struktura danych (ASD), to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji. Jaka jest różnica pomiędzy struktura danych a abstrakcyjna struktura danych? Struktura danych jest pewna implementacja konkretnej abstrakcyjnej struktury danych przeznaczonej do pracy na konkretnym komputerze (chodzi o jego architekturę) i systemie operacyjnym. Na tym i kolejnych wykładach zostana omówione abstrakcyjne struktury danych wraz z przykładowymi implementacjami. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 6 / 47

Abstarkcyjne struktury danych Liniowe abstrakcyjne struktury danych: Stos Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 7 / 47

Abstarkcyjne struktury danych Liniowe abstrakcyjne struktury danych: Stos Kolejka Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 7 / 47

Abstarkcyjne struktury danych Liniowe abstrakcyjne struktury danych: Stos Kolejka Listy: jednokierunkowe listy niecykliczne, dwukierunkowe listy niecykliczne, jednokierunkowe listy cykliczne (pierścienie jednokierunkowe), dwukierunkowe listy cykliczne (pierścienie dwukierunkowe). Tablice haszujace Drzewiaste struktury danych Drzewa poszukiwań binarnych Kopce Drzewa AVL Drzewa Czerwono-Czarne... Grafy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 7 / 47

Stos Stos jest struktura liniowo uporzadkowanych danych, z których jedynie ostatni element, zwany wierzchołkiem, jest w danym momencie dostępny. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 8 / 47

Stos Stos jest struktura liniowo uporzadkowanych danych, z których jedynie ostatni element, zwany wierzchołkiem, jest w danym momencie dostępny. W wierzchołku odbywa się dołaczanie nowych elementów, również jedynie wierzchołek można usunać. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 8 / 47

Stos Stos jest struktura liniowo uporzadkowanych danych, z których jedynie ostatni element, zwany wierzchołkiem, jest w danym momencie dostępny. W wierzchołku odbywa się dołaczanie nowych elementów, również jedynie wierzchołek można usunać. Stos jest zatem specjalnym przypadkiem listy jednokierunkowej, a jego cecha charakterystyczna jest to, że dane sa zapisywane i pobierane metoda Last-In-First-Out (LIFO) (pierwszy wchodzi, ostatni wychodzi). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 8 / 47

Stos Stos jest struktura liniowo uporzadkowanych danych, z których jedynie ostatni element, zwany wierzchołkiem, jest w danym momencie dostępny. W wierzchołku odbywa się dołaczanie nowych elementów, również jedynie wierzchołek można usunać. Stos jest zatem specjalnym przypadkiem listy jednokierunkowej, a jego cecha charakterystyczna jest to, że dane sa zapisywane i pobierane metoda Last-In-First-Out (LIFO) (pierwszy wchodzi, ostatni wychodzi). Działanie stosu jest często porównywane do stosu talerzy: nie można usunać talerza znajdujacego się na dnie stosu nie usuwajac wcześniej wszystkich innych. nie można także dodać nowego talerza gdzieś indziej, niż na sama górę. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 8 / 47

Stos - operacje Niech S = (d 1, d 2,..., d n ) oznacza stos, wtedy: Odkładanie elementu na stos: push(s, d) = (d, d 1, d 2,...,d n ) Pobieranie elementu ze stosu: pop(s) = (d 2,..., d n ), o ile n > 1 Pobieranie elementu ze szczytu stosu bez jego usuwania: top(s) = d 1 Sprawdzanie niepustości stosu: empty(s) wtw., gdy n = 0 Pop Push 2 head 0 1 5 null Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 9 / 47

Stos - przykład pusty dno Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 10 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 11 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 12 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 13 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 14 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 15 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 16 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 17 / 47

Stos - przykład Co tu jest??? Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 18 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 19 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 20 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 21 / 47

Stos - przykład? Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 22 / 47

Stos - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 23 / 47

Zastosowanie stosu - Odwrotna notacja polska (ONP) Odwrotna notacja polska (ang. Reverse Polish Notation) jest sposobem zapisu wyrażeń arytmetycznych, w których znak wykonywanej operacji umieszczony jest po operandach (zapis postfiksowy), a nie pomiędzy nimi jak w zapisie algebraicznym (zapis infiksowy). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 24 / 47

Zastosowanie stosu - Odwrotna notacja polska (ONP) Odwrotna notacja polska (ang. Reverse Polish Notation) jest sposobem zapisu wyrażeń arytmetycznych, w których znak wykonywanej operacji umieszczony jest po operandach (zapis postfiksowy), a nie pomiędzy nimi jak w zapisie algebraicznym (zapis infiksowy). ONP nie wymaga używania w wyrażeniach nawiasów, co sprawia, że obliczenia w tej notacji sa bardzo łatwe do przeprowadzania na komputerze. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 24 / 47

Zastosowanie stosu - Odwrotna notacja polska (ONP) Odwrotna notacja polska (ang. Reverse Polish Notation) jest sposobem zapisu wyrażeń arytmetycznych, w których znak wykonywanej operacji umieszczony jest po operandach (zapis postfiksowy), a nie pomiędzy nimi jak w zapisie algebraicznym (zapis infiksowy). ONP nie wymaga używania w wyrażeniach nawiasów, co sprawia, że obliczenia w tej notacji sa bardzo łatwe do przeprowadzania na komputerze. ONP jest powszechnie stosowana w kompilatorach języków wysokiego poziomu (HLL; ang. High Level Language) do obliczania wartości wyrażeń arytmetycznych. Spowodowane jest to prostota obliczeń w porównaniu do zwykłej notacji z nawiasami. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 24 / 47

Zastosowanie stosu - Odwrotna notacja polska (ONP) Odwrotna notacja polska (ang. Reverse Polish Notation) jest sposobem zapisu wyrażeń arytmetycznych, w których znak wykonywanej operacji umieszczony jest po operandach (zapis postfiksowy), a nie pomiędzy nimi jak w zapisie algebraicznym (zapis infiksowy). ONP nie wymaga używania w wyrażeniach nawiasów, co sprawia, że obliczenia w tej notacji sa bardzo łatwe do przeprowadzania na komputerze. ONP jest powszechnie stosowana w kompilatorach języków wysokiego poziomu (HLL; ang. High Level Language) do obliczania wartości wyrażeń arytmetycznych. Spowodowane jest to prostota obliczeń w porównaniu do zwykłej notacji z nawiasami. Algorytm obliczania wartości wyrażenia ONP wykorzystuje stos do składowania wyników pośrednich. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 24 / 47

Zastosowanie stosu - Odwrotna notacja polska (ONP) Odwrotna notacja polska (ang. Reverse Polish Notation) jest sposobem zapisu wyrażeń arytmetycznych, w których znak wykonywanej operacji umieszczony jest po operandach (zapis postfiksowy), a nie pomiędzy nimi jak w zapisie algebraicznym (zapis infiksowy). ONP nie wymaga używania w wyrażeniach nawiasów, co sprawia, że obliczenia w tej notacji sa bardzo łatwe do przeprowadzania na komputerze. ONP jest powszechnie stosowana w kompilatorach języków wysokiego poziomu (HLL; ang. High Level Language) do obliczania wartości wyrażeń arytmetycznych. Spowodowane jest to prostota obliczeń w porównaniu do zwykłej notacji z nawiasami. Algorytm obliczania wartości wyrażenia ONP wykorzystuje stos do składowania wyników pośrednich. Algorytm przekształcania wyrażeń arytmetycznych na ONP wykorzystuje stos do przechowywania operatorów i nawiasów. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 24 / 47

Odwrotna notacja polska - przykłady Notacja normalna ONP 3 + 2 3 2 + 3 + 2 * 5 3 2 5 * + ((2+3)*5-7)/6 2 3 + 5 * 7-6 / 2 * (5 + 2) 2 5 2 + * (7 + 3) * (5-2) ^2 7 3 + 5 2-2 ^* 4 / (3-1) ^(2 * 3) 4 3 1-2 3 * ^/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 25 / 47

Algorytm obliczania wartości wyrażenia w ONP 1 Analizuj wyrażenie po jednym elemencie (stałej, zmiennej lub ograniczniku). 2 Jeśli element ten jest: 1 stała lub nazwa zmiennej - dopisz go na stos; 2 operatorem - zdejmij ze stosu właściwa dla danego operatora ilość argumentów, wykonaj na nich obliczenia, a uzyskany wynik dopisz na stos; 3 Jeśli badane wyrażenie nie zostało wyczerpane - wróć do punktu pierwszego; 4 Jeśli badane wyrażenie zostało wyczerpane - wartość znajdujaca się na stosie to wynik obliczeń. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 26 / 47

Algorytm obliczania wartości wyrażenia w ONP - przykład Badane wyrażenie: 6 3 / 2 5 + * Krok Wejście Operacja Stos 1 6 6 2 3 63 3 / 6/3 2 4 2 22 5 5 225 6 + 2+5 27 7 * 2*7 14 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 27 / 47

Algorytm obliczania wartości wyrażenia w ONP - przykład Badane wyrażenie: 7 3 + 5 2-2 ^* Krok Wejście Operacja Stos 1 7 7 2 3 7 3 3 + 7+3 10 4 5 10 5 5 2 10 5 2 6-5-2 10 3 7 2 10 3 2 8 ^ 3^2 10 9 9 * 10*9 90 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 28 / 47

Przekształcanie wyrażeń na ONP 1 Analizuj wyrażenie po jednym elemencie (stałej, zmiennej lub ograniczniku). 2 Jeśli element jest stała lub nazwa zmiennej, przekaż go na wyjście. 3 Jeśli element jest operatorem, to: (a) jeśli priorytet badanego operatora jest wyższy od priorytetu operatora zajmujacego szczyt stosu lub jeśli stos jest pusty - dopisz go na stos; (b) jeśli na szczycie stosu znajduje się operator o wyższym lub równym priorytecie - odczytaj ze stosu i prześlij na wyjście wszystkie operatory o priorytecie wyższym badź równym, aż do wystapienia na szczycie stosu operatora o priorytecie niższym od priorytetu operatora nadchodzacego z wejścia; element badany dopisz na stos; 4 Jeśli element jest nawiasem, to: (a) jeśli trafiłeś na nawias otwierajacy, dopisz go na stos; (b) jeśli trafiłeś na nawias zamykajacy: zdejmij wszystkie operatory ze stosu i przekaż je na wyjście, aż do trafienia na nawias otwierajacy; nawiasów nie wypisuj na wyjście. 5 Jeśli badane wyrażenie nie zostało wyczerpane - wróć do punktu pierwszego; 6 Jeśli badane wyrażenie zostało wyczerpane, odczytaj wszystkie operatory ze stosu i przekaż je na wyjście automatu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 29 / 47

Przekształcanie wyrażeń na ONP Badane wyrażenie: x + 3 z 2 3/k Krok Wejście Stos Wyjście 1 x x 2 + + 3 3 + 3 4 * +* 5 z +* z 6 - - *+ 7 2-2 8 * -* 9 3 -* 3 10 / -/ * 11 k -/ k 12 /- Wyrażenie zapisane w ONP: x3z +23 k/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 30 / 47

Przekształcanie wyrażeń na ONP Badane wyrażenie: (15 3)ˆ(3+2) 6/3 Krok Wejście Stos Wyjście 1 ( ( 2 15 ( 15 3 - (- 4 3 (- 3 5 ) - 6 ^ ^ 7 ( ^( 8 3 ^( 3 9 + ^(+ 10 2 ^(+ 2 11 ) ^ + 12 * * ^ 13 6 * 6 14 / / * 15 3 / 3/ Wyrażenie zapisane w ONP: 15 3 32+ˆ6 3/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 31 / 47

Kolejka Kolejka FIFO (First In First Out) jest struktura liniowo uporzadkowanych danych, w której dołaczać nowe dane można jedynie na koniec, a usuwać z poczatku. Procedura usunięcia danych z końca kolejki jest taka sama, jak w przypadku stosu, z ta różnica, że usuwamy dane od poczatku a nie od końca. Działanie na kolejce jest intuicyjnie jasne, gdy skojarzymy ja z kolejka ludzi np. w sklepie. Każdy nowy klient staje na jej końcu, obsługa odbywa się jedynie na poczatku. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 32 / 47

Kolejka - operacje Niech K = (d 1, d 2,...,d n ) oznacza kolejkę, wtedy: Wstawianie elementu do kolejki: enqueuq(k, d)= (d 1, d 2,..., d n, d) Pobieranie elementu z kolejki: dequeuq(k) = (d 2,...,d n ), o ile n > 1 Obsługiwanie pierwszego elementu z kolejki bez jego usuwania : first(k) = d 1 Sprawdzanie niepustości kolejki: empty(k) wtw., gdy n = 0 Pocz atek Kolejki Koniec Kolejki Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 33 / 47

Tablicowa implementacja stosu i kolejki Wykorzystuje tablicę A złożona z n elementów A[i], gdzie n jest maksymalna liczba spodziewanych elementów. Operacje polegaja na manipulacji indeksami tablicy. Operacja wstawiania elementu do stosu - PUSH Operacja usuwania elementu ze stosu - POP Operacja wstawiania elementu do kolejki - Enqueue Operacja usuwania elementu z kolejki - Dequeue Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 34 / 47

Stos - implementacja tablicowa, założenia top[s] numer ostatniego elementu wstawionego do stosu. Stos składa się z elementów S[1],..., S[top[S]]. S[1] jest elementem na dnie stosu. S[top[S]] jest elementem na szczycie stosu. Jeżeli top[s] = 0, to stos jest pusty. Do sprawdzenia, czy stos jest pusty używana jest operacja Stack Empty. Próba zdjęcia elementu ze stosu sygnalizowana jest błędem niedomiaru. Jeżeli top[s] jest większe niż ustalony z góry rozmiar tablicy, to stos jest przepełniony. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 35 / 47

Stos - implementacja tablicowa Push(S, x) 1: if top[s] = length[s] then 2: error przepełnienie 3: end if 4: top[s] = top[s]+1 5: S[top[S]] = x 1 5 2 3 top Kierunek wstawiania Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 36 / 47

Stos - implementacja tablicowa Stack-Empty(S) 1: if top[s] = 0 then 2: return true 3: else 4: return false 5: end if Pop(S) 1: if Stack-Empty(S) then 2: error niedomiar 3: end if 4: top[s] = top[s] 1 5: return S[top[S] + 1] 1 5 2 3 top Kierunek wstawiania Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 37 / 47

Stos - implementacja tablicowa # include <iostream > using namespace std ; i n t co n st DLUGOSC_MAX=20; i n t const STOS_PELNY=3; i n t const STOS_PUSTY=2; i n t const OK = 1 ; i n t szczyt =0; i n t Stos [DLUGOSC_MAX+ 1 ] ; i n t push ( i n t x ) ; i n t pop ( i n t w ) ; i n t StanStosu ( ) ; void c l e a r ( ) { szczyt = 0 ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 38 / 47

Stos - implementacja tablicowa i n t main ( void ) { i n t a, i ; f o r ( i =0; i < DLUGOSC_MAX; i ++ ) push ( i ) ; f o r ( i =0; i < DLUGOSC_MAX; i ++ ) { pop(&a ) ; cout << a << ", " ; } r e t u r n 0 ; } i n t StanStosu ( ) { switch ( szczyt ) { case 0 : r e t u r n (STOS_PUSTY) ; case DLUGOSC_MAX+1: r e t u r n (STOS_PELNY ) ; d e f a u l t : r e t u r n (OK) ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 39 / 47

Stos - implementacja tablicowa i n t push ( i n t x ) { i f ( szczyt <=DLUGOSC_MAX) { Stos [ szczyt ++]=x ; r e t u r n (OK) ; } else r e t u r n (STOS_PELNY ) ; } i n t pop ( i n t w) { i f ( szczyt >0){ w=stos[ szczyt ] ; r e t u r n (OK) ; } else r e t u r n (STOS_PUSTY) ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 40 / 47

Kolejka - implementacja tablicowa n 1 elementowa kolejka jest impelementowana za pomoca n-elementowej tablicy Q, tj. Q = Q[1]...Q[n]. Atrybut head[q] wskazuje na głowę, czyli poczatek kolejki. Atrybut tail[q] wyznacza następna wolna pozycję, na która można wstawić nowy element. Elementy kolejki znjduja się na pozycjach: head[q], head[q]+ 1,...,tail[Q] 1. Zakładmy, że tablica jest cykliczna, tzn. że pozycja o numerze 1 jest bezpośrednim następnikiem pozycji n. Jeżeli head[q] = tail[q],to kolejka jest pusta. Poczatkowo head[q] = tail[q] = 1. Jeżeli kolejka jest pusta, to próba usunięcia jest sygnalizowana błędem niedomiaru. Jeżeli head[q] = tail[q]+1, to kolejka jest pełna. Jeżeli kolejka jest pełna, to próba dodania nowego elementu jest sygnalizowana błędem niedomiaru. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 41 / 47

Kolejka - implementacja tablicowa Dequeue(Q) 1: if head[q] = tail[q] then 2: error Niedomiar 3: end if 4: x = Q[head[Q]] 5: if head[q] = length[q] then 6: head[q] = 1 {Założenie o cykliczności} 7: else 8: head[q] = head[q]+1 9: end if 10: return x 1 5 - - 2 3 0 tail head Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 42 / 47

Kolejka - implementacja tablicowa Enqueue(Q, x) 1: if head[q] = (tail[q]+1) mod length(q) then 2: error Nadmiar 3: end if 4: Q[tail[Q]] = x 5: if tail[q] = length[q] then 6: tail[q] = 1 7: else 8: tail[q] = tail[q]+1 9: end if 1 5 - - 2 3 0 tail head Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 43 / 47

Kolejka - implementacja tablicowa Q Q Q 1 2 3 4 5 6 7 8 9 10 6 9 8 4 head[q]=4 tail[q]=8 1 2 3 4 5 6 7 8 9 10 6 9 8 4 17 3 5 tail[q]=1 head[q]=4 1 2 3 4 5 6 7 8 9 10 6 9 8 4 17 3 5 tail[q]=1 head[q]=5 Enq(Q,17) Enq(Q,3) Enq(Q,5) Deq(Q) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 44 / 47

Kolejka - implementacja tablicowa # include <iostream > using namespace std ; i n t head=0, t a i l =0; i n t const MaxElt =20; i n t Kolejka [ MaxElt + 1 ] ; void wstaw ( i n t x ) { Kolejka [ t a i l ++]=x ; i f ( t a i l >MaxElt ) t a i l =0; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 45 / 47

Kolejka - implementacja tablicowa i n t obsluz ( i n t w) { i f ( head== t a i l ) r e t u r n 1; w= Kolejka [ head + + ] ; i f ( head>maxelt ) head =0; r e t u r n 1 ; } i n t pusta ( ) { / / czy k o l e j k a j e s t pusta? i f ( head== t a i l ) r e t u r n 1 ; / / k o l e j k a pusta else r e t u r n 0 ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 46 / 47

Kolejka - implementacja tablicowa i n t main ( void ) { f o r ( i n t i =0; i <MaxElt ; i ++) wstaw ( i ) ; i n t s ; f o r ( i n t i =0; i <MaxElt ; i ++) { i n t res = obsluz (&s ) ; i f ( res ==1) cout << " Obsluzony z o s t a l k l i e n t : " << s << endl ; else cout << " Kolejka pusta! " << endl ; ; } r e t u r n 0 ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 5 47 / 47