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:

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

Algorytmy i Struktury Danych.

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)

Algorytmy i Struktury Danych.

Programowanie i struktury danych 1 / 44

Algorytmy i Struktury Danych

Dynamiczne struktury danych

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

Algorytmy i Struktury Danych.

Wykład 6. Dynamiczne struktury danych

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

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

TRANSLACJA I TRANSLATORY

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

Struktury danych (I): kolejka, stos itp.


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

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

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

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Wstęp do programowania

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

Dynamiczne struktury danych

Podstawowe struktury danych

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

Algorytmy i Struktury Danych.

Struktury. Przykład W8_1

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

Abstrakcyjne struktury danych w praktyce

Lista, Stos, Kolejka, Tablica Asocjacyjna

Algorytmy i Struktury Danych

Listy, kolejki, stosy

Algorytmy i Struktury Danych.

Marcin Matusiak i Łukasz Stasiak

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

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

INFORMATYKA DANE.

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

Stos LIFO Last In First Out

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

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

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

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

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

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

Przykładowe B+ drzewo

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i struktury danych. wykład 5

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

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

Programowanie Proceduralne

Abstrakcyjne struktury danych - stos, lista, drzewo

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

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

Struktury dynamiczne

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

Teoretyczne podstawy informatyki

Temat: Dynamiczne liniowe struktury danych - stos, kolejka, lista. 1. Wady i zalety struktury tablicy

Wstęp do Informatyki

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Wstęp do programowania

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

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. Jednokierunkowa lista liniowa. Arkadiusz Chrobot. 28 marca 2017

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Lab 9 Podstawy Programowania

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

Programowanie i struktury danych

Podstawy Programowania 2 Jednokierunkowa lista liniowa. Plan. Jednokierunkowa lista liniowa. Jednokierunkowa lista liniowa. Notatki. Notatki.

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

Podstawy Informatyki. Wykład 6. Struktury danych

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA. Część 3. Drzewa Przeszukiwanie drzew

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Język ludzki kod maszynowy

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Transkrypt:

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

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

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 4 2 / 57

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 4 3 / 57

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 4 3 / 57

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 4 3 / 57

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 4 3 / 57

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 4 4 / 57

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 4 4 / 57

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 4 4 / 57

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 4 4 / 57

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 4 5 / 57

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 4 6 / 57

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 4 6 / 57

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 4 6 / 57

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 4 6 / 57

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

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

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 4 7 / 57

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 4 8 / 57

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 4 8 / 57

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 4 8 / 57

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 4 8 / 57

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 4 9 / 57

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 4 24 / 57

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 4 24 / 57

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 4 24 / 57

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 4 24 / 57

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 4 24 / 57

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 4 25 / 57

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 4 26 / 57

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 4 27 / 57

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 4 28 / 57

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 4 29 / 57

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 4 30 / 57

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 4 31 / 57

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 4 32 / 57

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 4 33 / 57

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 4 34 / 57

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 4 35 / 57

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 4 36 / 57

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 4 37 / 57

Stos - implementacja tablicowa # i n c l u d e < s t d i o. h> # i n c l u d e < s t d l i b. h> # d e fine 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 4 38 / 57

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 ) ; p r i n t f ("%d, ", 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 4 39 / 57

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 4 40 / 57

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 4 41 / 57

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 4 42 / 57

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 4 43 / 57

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 4 44 / 57

Kolejka - implementacja tablicowa # i n c l u d e < s t d i o. h> # i n c l u d e < s t d l i b. h> i n t head=0, t a i l =0; # d e fine 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 4 45 / 57

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 ( ) { i f ( head== t a i l ) r e t u r n 1 ; else r e t u r n 0 ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 46 / 57

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) p r i n t f ( " Obsluzony z o s t a l k l i e n t : %d \ n ", s ) ; else p r i n t f ( " Kolejka pusta! \ n " ) ; } r e t u r n 0 ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 47 / 57

Dynamiczna realizacja Stosu i Kolejki # i f n d e f ITEM_H # d e fine ITEM_H typedef s t r u c t ITEM { i n t data ; s t r u c t ITEM next ; } Item ; # e n d i f Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 48 / 57

Dynamiczna realizacja Stosu # i f n d e f STACK_H # d e fine STACK_H # i n c l u d e < stdbool. h> # i n c l u d e " item. h " typedef s t r u c t { Item top ; } Stack ; / / i n i c j a l i z u j e stos void i n i t S t a c k ( Stack s ) ; / / usuwa ze sto su wszystki e elementy void clearstack ( Stack s ) ; / / umieszcza element na s t o s i e void push ( Stack s, i n t w ) ; / / usuwa element ze szczytu sto su void pop ( Stack s ) ; / / pobiera element ze szczytu stosu i n t top ( Stack const s ) ; / / zwraca true, j e z e l i stos pusty bool stackempty ( Stack const s ) ; # e n d i f Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 49 / 57

Dynamiczna realizacja Stosu # i n c l u d e < s t d l i b. h> # i n c l u d e " stack. h " void i n i t S t a c k ( Stack s ) { s >to p = NULL ; } bool stackempty ( Stack const s ) { r e t u r n ( s >top == NULL ) ; } i n t top ( Stack const s ) { r e t u r n s >top >data ; } void clearstack ( Stack s ) { while (! stackempty ( s ) ) pop ( s ) ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 50 / 57

Dynamiczna realizacja Stosu void push ( Stack s, i n t w) { Item p = malloc ( s i z e o f ( Item ) ) ; p >data = w; p >next = NULL ; } i f ( s >top == NULL) { / / stos pusty s >top = p ; } else { p >next = s >top ; s >top = p ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 51 / 57

Dynamiczna realizacja Stosu void pop ( Stack s ) { i f ( s >top!= NULL) { Item p = s >top ; s >top = p >next ; f r e e ( p ) ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 52 / 57

Dynamiczna realizacja Kolejki # i f n d e f QUEUE_H # d e fine QUEUE_H # i n c l u d e < stdbool. h> # i n c l u d e " item. h " typedef s t r u c t { Item f i r s t ; Item l a s t ; } Queue ; # e n d i f Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 53 / 57

Dynamiczna realizacja Kolejki # i f n d e f QUEUE_H # d e fine QUEUE_H / / i n i c j a l i z u j e k o l e j k e void initqueue ( Queue ); / / usuwa z k o l e j k i wszystkie elementy void clearqueue ( Queue ) ; / / dodaje element do k o l e j k i void i n j e c t ( Queue, i n t ) ; / / pobiera wartosc pierwszego elementu i n t f r o n t ( Queue const ) ; / / usuwa element z k o l e j k i void e j e c t ( Queue ); / / zwraca true, j e z e l i k o l e j k a pusta bool queueempty ( Queue q ) ; # e n d i f Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 54 / 57

Dynamiczna realizacja Kolejki # i n c l u d e < s t d l i b. h> # i n c l u d e " queue. h " void initqueue ( Queue q ) { q > f i r s t = q >l a s t = NULL ; } bool queueempty ( Queue q ) { r e t u r n ( q. f i r s t == NULL ) ; } i n t f r o n t ( Queue const q ) { r e t u r n q > f i r s t >data ; } void clearqueue ( Queue q ) { while ( q > f i r s t!= NULL) e j e c t ( q ) ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 55 / 57

Dynamiczna realizacja Kolejki void i n j e c t ( Queue q, i n t w) { Item p = malloc ( s i z e o f ( Item ) ) ; p >data = w; p >next = NULL ; } i f ( q > f i r s t == NULL) { q > f i r s t = q >l a s t = p ; } else { q >l a s t >next = p ; q >l a s t = p ; } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 56 / 57

Dynamiczna realizacja Kolejki void e j e c t ( Queue q ) { / / jeden element lub k o l e j k a pusta i f ( q > f i r s t == q >l a s t ) { f r e e ( q > f i r s t ) ; q > f i r s t = q > l a s t = NULL ; } else { Item p = q > f i r s t ; q > f i r s t = p >next ; f r e e ( p ) ; } } Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 57 / 57