Stack

Werbung
Einführung in die Informatik –
Algorithmen und Datenstrukturen
Thema 14 – Stapel und Warteschlangen
Warteschlangen - Queues
Warteschlange
Eine Warteschlange ist eine eingeschränkte Form des
abstrakten Datentyps Liste. Elemente dürfen nur hinten,
am Ende, eingefügt und am anderen Ende, am Anfang,
entfernt werden (Umkehrung auch zulässig).
Warteschlangen werden auch als fifo (first in - first out)Speicher bezeichnet.
2
Spezifikation des ADT - Queue
Die Beschreibung des ADT Queue erfolgt exakt über Import, Export,
Wertebereich und Operationen.
Import:
Typen: TInhalt
Export:
Typen: TQueue
Wertebereich:
Die Elemente der Datenstruktur sind linear angeordnet. Ein neues Element
kann nur am Ende eingefügt werden, entfernt werden kann ein Element nur
am Anfang. (FiFo-Struktur)
Die Anzahl der Elemente ist durch den zur Laufzeit verfügbaren Speicherplatz
begrenzt.
Die Elemente enthalten den importierten Inhaltstyp.
3
Operationen auf den ADT - Queue
Initialisieren:
Methode init (TQueue [aus])
vor
nach
Es existiert eine leere Schlange (als
Ausgangsparameter).
/**
* Methode init
* Initialisierung der Warteschlange
*/
public void init()
{
kopf = null;
ende = null;
}
4
Operationen auf den ADT - Queue
Einfügen:
Methode put (TQueue [ein/aus]; TInhalt[ein])
vor
Die Schlange existiert und nicht voll.
nach
Der Inhalt ist als letzte Element der Schlange angefügt.
/**
* Methode put, fuegt ein neue Objekt an die Schlange an
*/
public void put() {
Element akt;
akt = new Element(); // Element erzeugen
if (kopf == null){
kopf = akt;
akt.next = null;
ende = akt; }
else {
ende.next = akt;
ende = akt; }
}
5
Operationen auf den ADT - Queue
Entnehmen:
Methode Get (TQueue [ein/aus]; TInhalt[aus])
vor
Die Warteschlange existiert und nicht leer.
nach
Das erste Element der Schlange ist entfernt, eine
Kopie seines Inhaltes steht im zweiten Parameter.
/**
* Methode get, Entnehmen des 1. Objektes der Warteschlange
*/
public Element get()
{
Element akt = kopf;
if (kopf != null)
{
kopf = kopf.next;
}
return akt;
}
6
Operationen auf den ADT - Queue
Anzahl?:
Methode
vor
nach
Count (TQueue [ein]): Integer
Die Schlange existiert.
Die Anzahl der Elemente der Schlange wird als
Funktionsergebnis zurückgegeben.
/**
* Methode count
* @return gibt die Anzahl der WS-objekte zurueck
*/
public int count()
{
int anz = 0;
Element akt = kopf;
while (akt != null)
{
anz++;
akt = akt.next;
}
return anz;
}
7
Operationen auf den ADT - Queue
Ist die Schlange leer?:
Methode Empty (TQueue [ein]): Boolean
vor
Die Schlange existiert.
nach
Falls die Schlange kein Element enthält, ist das
Funktionsergebnis True, ansonsten False.
/**
* Methode empty
*
* @return true, wenn Warteschlange leer
*/
public boolean empty()
{
boolean em = false;
if (kopf == null)
em = true;
return em;
}
8
Operationen auf den ADT - Queue
Ist die Schlange voll?:
Methode
vor
nach
9
Full : Boolean
Falls im Speicher kein Platz mehr für ein neues
Element ist, ist das Funktionsergebnis True,
ansonsten False.
Operationen auf den ADT-Queue
(alternative Notation)
Q sei eine Warteschlange deren Elemente vom Typ ETYPE sind und x ist sei
Element vom Typ ETYPE.
Operation
Wirkung
clear(Q)
Initialisierung, löscht den Inhalt der Warteschlange
get(Q,x)
gibt FALSE zurück, wenn Q leer ist, sonst wird x auf den
Wert des Elementes am Anfang von Q gesetzt, das
Element wird aus Q entfernt und TRUE zurückgegeben
(dequeue)
put (x,Q)
(enqueue)
gibt FALSE zurück, wenn Q voll ist, sonst wird x am
Ende von Q eingefügt und TRUE zurückgegeben
isEmpty(Q)
gibt TRUE zurück, wenn Q leer ist, sonst FALSE
isFull(Q)
gibt TRUE zurück, wenn Q voll ist, sonst FALSE
10
Stapel - Stack
Stack
Ein Stack ist ein abstrakter, auf einem Listenmodell
basierender Datentyp. Alle Operationen werden an einem
Ende der Liste durchgeführt. Das Element wird als
oberstes Element (top) der Liste bezeichnet.
Für den Stack ist auch die Bezeichnung lifo (last in - first
out) - Speicher gebräuchlich.
11
Spezifikation des ADT - Stack
Die Beschreibung des ADT Stack erfolgt exakt über Import,
Export, Wertebereich und Operationen.
Import:
Typen: TInhalt
Export:
Typen: TStack
Wertebereich:
Die Elemente der Datenstruktur sind linear angeordnet, nur das
jeweils zuletzt hinzugefügte Element (Top-of-Stack) ist erreichbar.
Die Anzahl der Elemente ist durch den zur Laufzeit verfügbaren
Speicherplatz begrenzt.
Die Elemente enthalten den importierten Inhaltstyp.
12
Operationen auf den ADT - Stack
Initialisieren:
Methode
vor
nach
Init (TStack [aus])
Es existiert ein leerer Stack (als
Ausgangsparameter).
/**
* Methode init
* Initialisierung des Stacks
*/
public void init()
{
kopf = null;
}
13
Operationen auf den ADT - Stack
Einfügen:
Methode Push (TStack [ein/aus]; TInhalt[ein])
vor
Der Stack existiert und nicht voll.
nach
Das neue Inhaltsobjekt ist der Top-of-Stack.
/**
* Methode push, legt ein neues Element auf dem
Stack ab
*/
public void push()
{
Element akt;
akt = new Element(); // Element erzeugen
akt.next = kopf;
kopf = akt;
}
14
Operationen auf den ADT - Stack
Entnehmen:
Methode Pop (TStack [ein/aus]; TInhalt[aus])
vor
Der Stack existiert und nicht leer.
nach
Der Top-of-Stack ist entfernt, das entfernte Objekt
wird zurückgegeben.
/**
* Methode pop , Entnehmen des ersten Objektes
*/
public Element pop()
{
Element akt = kopf;
if (kopf != null)
{
kopf = kopf.next;
}
return akt;
}
15
Operationen auf den ADT - Stack
Anzeigen:
Methode
vor
nach
Top (TStack [ein/aus]; TInhalt[aus])
Der Stack existiert und nicht leer.
Eine Kopie des Inhaltes des Top-of-Stack steht im
zweiten Parameter zur Verfügung.
/**
* Methode top
* Ausgeben des Inhaltes des obersten Stack-Objektes
*/
public void top()
{
if (kopf != null)
kopf.container.ausgabe();
}
16
Operationen auf den ADT - Stack
Ist Stack leer?:
Methode Empty (TStack [ein]):Boolean
vor
Der Stack existiert.
nach
Falls sich kein Element im Stack befindet, ist das
Funktionsergebnis True, ansonsten False.
/**
* Methode empty
*
* @return true, wenn Stack leer
*/
public boolean empty()
{
boolean em = false;
if (kopf == null)
em = true;
return em;
}
17
Operationen auf den ADT - Stack
Ist Stack leer?:
Methode
vor
nach
Empty (TStack [ein]):Boolean
Der Stack existiert.
Falls sich kein Element im Stack befindet, ist das
Funktionsergebnis True, ansonsten False.
Ist Stack voll?:
Methode
vor
nach
18
Full :Boolean
Falls im Speicher kein Platz mehr für ein neues
Element ist, ist das Funktionsergebnis True,
ansonsten False.
Operationen auf einen Stack
(alternative Notation)
S ist ein Stack vom Typ ETYPE und x ist ein Element vom Typ ETYPE.
Operation Wirkung
clear(S)
Initialisierung, löscht den Inhalt des Stacks
isEmpty(S) gibt TRUE zurück, wenn S leer ist, sonst FALSE
isFull(S)
gibt TRUE zurück, wenn S voll ist, sonst FALSE
pop(S,x)
gibt FALSE zurück, wenn S leer ist, sonst wird x auf den
Wert des obersten Elementes des Stacks gesetzt, das
Element entfernt und TRUE zurückgegeben
push(x,S)
gibt FALSE zurück, wenn S voll ist, sonst wird x als
oberstes Element des Stacks eingefügt und TRUE
zurückgegeben
19
Literatur
/BALZERT96/
/BARNES09/
/HEROLD10/
/RATZ10/
20
Balzert, Helmut; Lehrbuch der Softwaretechnik; Spektrum
Verlag, 1996
David J. Barnes, Michael Kölling
Java lernen mit BlueJ
Pearson Studium, 2009, ISBN-13: 978-3-86894-001-5
Herold, Helmut; Lurz, Bruno; Wohlrab, Jürgen
Grundlagen der Informatik, Pearson Studium, 2007
ISBN 987-3-8273-7305-2
Ratz, Dietmar; Scheffler, Jens; Seese, Detlef; Wiesenberger, Jan;
Grundkurs Programmieren in JAVA; Carl-Hanser-Verlag,
München, Wien; 2010
ISBN 3-935042-00-0
Herunterladen