Stapel (Stack, Keller)

Ähnliche Dokumente
Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Abstrakte Datentypen.

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Einführung in die Programmierung

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Probeklausur: Programmierung WS04/05

Objektorientierte Programmierung

Einführung in die Programmierung für Wirtschaftsinformatik

Java. Wir verwenden oft Java für Datenstrukturen und Algorithmen. Die Vorlesung ist aber von der Programmiersprache unabhängig.

Theorie zu Übung 8 Implementierung in Java

Inhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen

Objektorientierte Programmierung

1 Polymorphie (Vielgestaltigkeit)

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Java: Vererbung. Teil 3: super()

Grundlagen der Programmierung Prof. H. Mössenböck. 11. Objektorientierung

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Geordnete Binärbäume

Einführung Elementare Datenstrukturen. Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst.

Einstieg in die Informatik mit Java

Binärbäume. Prof. Dr. E. Ehses,

Vererbung. Martin Wirsing. Ziele. Vererbung

Java II - Übungsgruppe

Algorithmen und Datenstrukturen

Einführung in Javadoc

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Objektorientierte Programmierung

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Verkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen

(06 - Anwendungen von Stapeln und Schlangen)

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Java Schulung (Java 2 Java Development Kit 5 / 6)

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Lektion 6: Collections, Telefonbuchbeispiel 702 / 763

Folge 18 - Vererbung

Repetitorium Informatik (Java)

Probeklausur: Programmierung WS04/05

Überschreiben von Methoden

U08 Entwurfsmuster (II)

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik Generische Klassen

JAVA - Methoden

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Kapitel 6. Vererbung

Java-Schulung Grundlagen

Große Übung Praktische Informatik 1

Programmierstil. Objektsammlungen. Konzepte. Zwischenspiel: Einige beliebte Fehler... Variablennamen Kommentare Layout Einrückung

Kapitel 6. Vererbung

Grundkonzepte java.util.list

Übung 13: Priority Queues (Vorrangwarteschlangen 1 )

368 4 Algorithmen und Datenstrukturen

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Javakurs zu Informatik I. Henning Heitkötter

Struktur am Beispiel einer Liste

Übersicht. Vorstellung des OO-Paradigmas

Vorlesung 09: Mengen. Peter Thiemann SS 2010

8. Generics Grundlagen der Programmierung 1 (Java)

Institut für Informatik

Java Einführung Abstrakte Klassen und Interfaces

Handbuch für die Erweiterbarkeit

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Einführung in die Programmierung Vorlesungsprüfung

Programmieren in Java

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Vererbung & Schnittstellen in C#

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

JAVA KURS COLLECTION

Ich liebe Java && Ich liebe C# Rolf Borst

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

5 Grundlagen der Java-Syntax

Kapitel 6. Vererbung

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

4. Objektorientierung I Grundlagen der Programmierung 1 (Java)

5. Tutorium zu Programmieren

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Teilprüfung Software- und Internettechnologie Programmierkurs 1 Wintersemester 2005/2006

Algorithmen und Datenstrukturen

Java Generics & Collections

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Software Engineering Klassendiagramme Einführung

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Einführung in die Java- Programmierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Java Einführung Methoden. Kapitel 6

Java Einführung Collections

Praktische Übung 'JUnit-Test'

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

3 Objektorientierte Konzepte in Java

Klassen mit Instanzmethoden

Repetitorium Informatik (Java)

Wie ich lernte die API zu lieben. 19. März sic[!]sec GmbH Industriestraße Gröbenzell

5. Übung zu Software Engineering

Javakurs für Anfänger

Programmierung in C. Grundlagen. Stefan Kallerhoff

Transkript:

Stapel (Stack, Keller) Eine wichtige Datenstruktur ist der Stapel. Das Prinzip, dass das zuletzt eingefügte Element als erstes wieder entfernt werden muss, bezeichnet man als LIFO-Prinzip (last-in, first-out). Stacks sind z.b. bei der syntaktischen Analyse (Compiler), bei der Berechnung von arithmetischen Termen oder bei der Abarbeitung von Rekursionen von zentraler Bedeutung. Wir stellen uns den Stapel als spezielle Liste vor, bei der Elemente nur am Anfang (= oben) hinzufügen können. Ein Zugriff ist nur auf das oberste Element möglich. Ein Stapel kann man sich mit einem Münzstapel vorstellen, bei dem Münzen oben aufgelegt oder entfernt werden können. Der ADT Stapel in Java Konstruktor Stack( ) Bedeutung: Neuer Stapel (Stapel ist leer) Attribut-Methoden boolean isempty() true, wenn Stapel leer Object peek() liefert das oberste Element, ohne den Stapel zu verändern (= Inspizieren der Stapelspitze) Modifizierende Methoden Object push (Object element) legt ein Element oben auf den Stapel und gibt element als Rückgabe zurück Object pop( ) Die Operation entfernt das oberste Element; Fehler, wenn Stapel leer Beispiel Stack s = new Stack(); s.isempty(); true s.push("a"); s.isempty(); false s.peek( ); "a" s.pop( ); "a" s.isempty(); liefert jetzt true; s.pop( ) führt zu einer Fehlermeldung s.peek() führt zu einer Fehlermeldung Wagner, Apr-11 Seite 27

Aufgabe: Was liefern folgende Operationen? Stack s; s.isempty(); s = new Stack(); s.isempty(); s.push ("x"); s.peek(); s.push("z"); s.pop(); s.push("y"); s.isempty(); s= new Stack(); s.pop(); Programmierung des ADT Stapel (als spezielle lineare Liste) public interface StapelIF { public boolean isempty(); //TRUE, wenn Stapel leer public Object push(object e); // Legt Knoten auf Stapel public Object pop(); // Entfernt oberstes Element vom Stapel public Object peek(); // Oberstes Stapelelement lesen public String tostring(); // Gibt Stapel aus // Interface public class Stapel implements StapelIF { private Knoten top; // Konstruktor: Stapel() { top=null; public boolean isempty() { //TRUE, wenn Stapel leer if (top == null) return true; else return false; public Object push(object element) { Knoten k = new Knoten(element,null); if (top == null) top = k; else { k.setzenachfolger(top); top=k; return element; // push Wagner, Apr-11 Seite 28

public Object pop() { if (top!= null) { Object ergebnis=top.liefereelement(); top= top.lieferenachfolger(); return ergebnis; else return null; // pop public Object peek() { if (top!= null) { Object ergebnis = top.liefereelement(); return ergebnis; else return null; // peek public String tostring() { String s=""; Knoten x = top; while(x!= null) { s = s+x.liefereelement().tostring()+"\n"; x= x.lieferenachfolger(); return s; // tostring Wagner, Apr-11 Seite 29

Das Applet StapelTest (in Auszügen) Stapel stapel = new Stapel();. Der Button PUSH protected void jbutton1actionperformed(actionevent evt){ //TODO add your handler code here String ein = jtextfield1.gettext(); stapel.push(ein); jtextarea2.append("push: "+ein+"\n"); jtextfield1.requestfocus(); // Textfeld erhält Fokus jtextfield1.selectall(); // alles markieren // PUSH Der Button POP protected void jbutton2actionperformed(actionevent evt){ if (!stapel.isempty()) { jtextarea2.append("pop: "+stapel.pop()+"\n"); // POP else { jtextarea2.append("stapel leer\n"); Der Button Peek private void jbutton3actionperformed(actionevent evt) { // Peek jtextarea2.append("peek: "+stapel.peek()+"\n"); Wagner, Apr-11 Seite 30

Fragen & Aufgaben Warum entsteht bei der späteren Verwendung des Stapels eine Fehlermeldung, wenn in der Deklaration statt Stapel stapel = new Stapel(); die falsche Anweisung Stapel stapel = null; steht? Aufgabe Entferne in der Klasse die Methode tostring() durch Auskommentieren. Die Anwendung StapelTest läuft weiterhin, da die Klasse Object eine gleichlautende Methode bereitstellt! Allerdings erzeugt sie eine völlig andere Ausgabe: Jede Klasse, die sich auf die Klasse Object stützt, verfügt automatisch über eine Methode tostring(). Die Implementierung in Object liefert einen String der Art Klassenname@Referenz. Wagner, Apr-11 Seite 31