Abstraktní datové typy: zásobník



Podobné dokumenty
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Datové struktury. alg12 1

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Úvod do programovacích jazyků (Java)

Principy objektově orientovaného programování

Vytváření a použití knihoven tříd

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Kolekce, cyklus foreach

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Programování v Javě I. Leden 2008

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Programování v C++ 2, 4. cvičení

Základní datové struktury

ADT/ADS = abstraktní datové typy / struktury

Programování v Javě I. Únor 2009

1. Programování proti rozhraní

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

Algoritmizace prostorových úloh

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Java a XML. 10/26/09 1/7 Java a XML

RMI Remote Method Invocation

Typický prvek kolekce pro české řazení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

5 Rekurze a zásobník. Rekurzivní volání metody

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

Technologie JavaBeans

Abstraktní datové typy

typová konverze typová inference

OOPR_05. Případové studie

Dynamické datové struktury I.

9. přednáška - třídy, objekty

Algoritmizace prostorových úloh

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

KTE / ZPE Informační technologie

Abstraktní datové typy

boolean hasnext() Object next() void remove() Kolekce

Generické programování

PREPROCESOR POKRAČOVÁNÍ

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

1. Téma 12 - Textové soubory a výjimky

Iterator & for cyklus

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Třídy a objekty -příklady

Seminář Java II p.1/43

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Algoritmizace a programování

Konstruktory a destruktory

Programování v C++ 1, 5. cvičení

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Lineární datové struktury

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Komponenty v.net. Obsah přednášky

20. Projekt Domácí mediotéka

Úvod do programovacích jazyků (Java)

Da D to t v o é v ty t py IB111: Datové typy

Struktura programu v době běhu

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

IRAE 07/08 Přednáška č. 7. Začátek (head)

Výčtový typ strana 67

7. Dynamické datové struktury

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Seminář Java IV p.1/38

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Algoritmizace a programování

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Java Řetězce Java, zimní semestr

Java Výjimky Java, zimní semestr

PŘETĚŽOVÁNÍ OPERÁTORŮ

Programovací jazyk Java

Projekty pro výuku programování v jazyce Java

Dynamické struktury a Abstraktní Datový Typy (ADT)

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Java - výjimky. private void vstup() throws IOException {... }

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Část 1 Spojové struktury (stromy) Dynamické struktury a Abstraktní Datový Typy (ADT) Část 2 Abstraktní datový typ. Část 3 Příklad ADT Prioritní fronta

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Implementace abstraktních datových typů. Zásobník (Stack) Fronta (Queue) Obousměrná fronta (Dequeue) Vektor (Vector) Seznam (List)

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Abstraktní třídy, polymorfní struktury

Java Enum Java, zimní semestr ,2017 1

Java - řazení objektů

8 Třídy, objekty, metody, předávání argumentů metod

Úvod do programování - Java. Cvičení č.4

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Část I Spojové struktury

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

10 Generické implementace

Spojové struktury. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 10 A0B36PR1 Programování 1

Teoretické minimum z PJV

Transkript:

Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní datového typu pomocí specifikované sady operací: Time: gethours(), getminutes(), increment() umožňují oddělení rozhraní od implementace různá efektivita operací různé vývojové verze téže implementace implementace poskytnuté různými autory ADT: Zásobník 2 Diagram signatury abstraktního datového typu ADT a Java Rozhraní datového typu pomocí konstrukce interface není konstruktor, žádná data jen operace bez implementace public interface Time int gethours(); int getminutes(); int increment(); ADT: Zásobník 3 ADT: Zásobník 4 1

ADT a Java Základní ADT Implementace datového typu konstruktory instanční proměnné implementace operací (musí být public!) public class TimeImpl implements Time public TimeImpl(int hrs, int mins) m = hrs * 60 + mins; public int gethours() return m / 60; public int getminutes() return m % 60; public int increment() m++; private int mins; ADT: Zásobník 5 zásobník (stack) fronta (queue) kolekce import java.util.*; množina (set) multimnožina (bag) seznam (list) zobrazení (map) strom (tree) ADT: Zásobník 6 Zásobník Struktura LIFO (Last In First Out) Operace: push vložení na vrchol zásobníku pop odstranění položky z vrcholu top získání hodnoty na vrcholu empty test, zda je zásobník prázdný Zásobník - rozhraní public interface Stack void push(object o); Object pop(); Object top(); boolean empty(); ADT: Zásobník 7 ADT: Zásobník 8 2

Zásobník - implementace Zásobník ve statickém poli Statická datová pole objektů s předem zadanou velikostí při překročení kapacity se generuje výjimka Dynamická datová pole objektů s proměnnou velikostí vázaná datová Object[ ] _data = new Object[max]; int _top = 0; 0 <= _top <= _data.length (=max) ADT: Zásobník 9 ADT: Zásobník 10 Zásobník ve statickém poli public class ArrayStack implements Stack public ArrayStack(int size) assert size > 0; _data = new Object[size]; (Příkaz assert) assert podmínka; assert podmínka : Popis chyby ; if(!podmínka ) throw new AssertionError(popis);... protected Object[] protected int _data; _top; Překlad: javac source 1.4 Priklad.java Spuštění: java ea Priklad ADT: Zásobník 11 ADT: Zásobník 12 3

Zásobník ve statickém poli public void push(object obj) assert _top < _data.length : "Preteceni"; _data[_top++] = obj; public Object pop() assert _top > 0 : "Zasobnik je prazdny"; return _data[--_top]; public Object top() assert _top > 0 : "Zasobnik je prazdny"; return _data[_top-1]; public boolean empty() return _top == 0; Zásobník ve statickém poli class TestZasobniku public static void main(string args[]) Stack z = new ArrayStack(4); System.out.println(z.empty()); z.push("a"); z.push("b"); z.push("c"); z.push("d"); while(!z.empty() ) System.out.print(z.pop()+" "); System.out.println(); ADT: Zásobník 13 ADT: Zásobník 14 Příklad postfixový kalkulátor class PostfixovyKalkulator public void cislo(int x) zasobnik.push(new Integer(x)); public void soucet() int y = popint(); int x = popint(); zasobnik.push(new Integer(x+y)); public int vysledek() return popint(); private int popint() return ((Object)zasobnik.pop()).intValue(); private ArrayStack zasobnik = new ArrayStack(10); ADT: Zásobník 15 Příklad postfixový kalkulátor PostfixovyKalkulator kalk = new PostfixovyKalkulator(); kalk.cislo(2); // (2 + 7) + 4 kalk.cislo(7); kalk.soucet(); kalk.cislo(4); kalk.soucet(); System.out.println("Vysledek je " + kalk.vysledek()); ADT: Zásobník 16 4

Zásobník v dynamickém poli public class DArrayStack extends ArrayStack public DArrayStack(int size, int delta) super(size); assert delta > 0; _delta = delta;... protected int _delta; Zásobník v dynamickém poli public void push(object obj) if( _top == _data.length ) Object[] nove = new Object[_top + _delta]; for(int i = 0; i < _top; i++) nove[i] = _data[i]; _data = nove; super.push(obj); ADT: Zásobník 17 ADT: Zásobník 18 Zásobník jako vázaná Zásobník jako vázaná Každý prvek nese hodnotu a odkaz na předchozí položku zásobníku. Položka na dně zásobníku nenese žádný odkaz (hodnota null) class StackElem Object data; StackElem last; // hodnota // předcházející prvek StackElem(Object data, StackElem last) this.data = data; this.last = last; ADT: Zásobník 19 ADT: Zásobník 20 5

Zásobník jako vázaná public class LinkedStack implements Stack public void push(object obj) _top = new StackElem(obj, _top); public Object pop() assert _top!= null; Object topobj = _top.data; _top = _top.last; return topobj; Zásobník jako vázaná public Object top() assert _top!= null; return _top.data; public boolean empty() return _top == null; protected StackElem _top = null; ADT: Zásobník 21 ADT: Zásobník 22 Aplikace zásobníku Volání podprogramů ukládání aktivačních záznamů funkce na zásobník návratová adresa, lokální proměnné a argumenty, mezivýsledky umožňuje rekurzi Vyhodnocování programu virtuální zásobníkový procesor JVM Java Virtual Machine (Sun) CLR Common Language Runtime (MS.NET) Řešení úloh ze cvičení public class Retezec public Retezec(int maxdelka) data = new char[maxdelka]; public int length() return delka; private char[] data; private int delka; ADT: Zásobník 23 ADT: Zásobník 24 6

Řešení úloh ze cvičení public char charat(int index) if( index < 0 index >= delka ) throw new IndexOutOfBoundsException(); return data[index]; public void setcharat(int index, char ch) if( index < 0 index >= delka ) throw new IndexOutOfBoundsException(); data[index] = ch; ADT: Zásobník 25 Řešení úloh ze cvičení public void append(char ch) if( delka == data.length ) throw new IndexOutOfBoundsException(); data[delka++] = ch; public int indexof(char ch) for(int i = 0; i < delka; i++) if( data[i] == ch ) return i; return -1; ADT: Zásobník 26 Řešení úloh ze cvičení public String tostring() return new String(data, 0, delka); public boolean equals(object obj) Retezec str = (Retezec)obj; if( delka!= str.length() ) return false; for( int i = 0; i < delka; i++ ) if( data[i]!= str.charat(i) ) return false; return true; ADT: Zásobník 27 7