GEHNIO
Gesamtschule Duisburg-Hamborn/Neumühl
Informatik in der Oberstufe

> Home
> Algorithmen
> Datenstrukturen
> Maschinenmodelle
> Probleme
> Themen
> Mindmaps
> Aufgaben
> Facharbeit
> Abitur
> Projekte
> Informatik-AG
> News
> Impressum
> email
 


Implementation des Datentyps "Schlange" (Queue)



Datenstruktur und Operationen

Der Datentyp Schlange (engl. Queue) ist ein Abstrakter Datentyp, der nach dem First-In-Firts-Out-Prinzip (FIFO) arbeitet und �ber folgende Standardoperationen verf�gt:

Operation Erl�uterung
Create(Schlange) Legt eine neue Schlange an.
Empty(Schlange) Boolesche Operation, die �berpr�ft, ob die Schlange leer ist (R�ckgabe true) oder noch Elemente enth�lt (R�ckgabe false).
Full(Schlange) Boolesche Operation, die �berpr�ft, ob die Schlange voll ist (R�ckgabe true) oder noch weitere Elemente aufnehmen kann (R�ckgabe false).
Put(Schlange,Element) Gibt ein Element auf die Schlange, d.h. h�ngt das Element hinten an die Schlange an.
Get(Schlange,Element) Entfernt ein Element vorne von der Schlange.
Top(Schlange,Element) Betrachtet das erste Element der Schlange ohne es zu entfernen.

Implementationsm�glichkeiten

Es gibt im Wesentlichen drei einfache M�glichkeiten zur Implementation des Abstrakten Datentyps Schlange:

(1) Implementation als Array

Bei der Implementation als Array ben�tigt man zwei Komponenten:
  • Ein Array fester L�nge n
  • Einen Zeiger î auf das letzte Element der Schlange
Dabei gilt:
  • Das Array sei von 1 bis n durchnummeriert.
  • Das erste Element der Schlange steht immer im ersten Arrayfeld.
  • Bei der leeren Schlange hat der Zeiger auf das letzte Element den Wert Null.


13

100

22

12

27

33

40

50

83

25

55

 

 

 

 

 

 

 

 

 

 

 

 

 

 

î

 

 

 

 

Algorithmische Umsetzung der Operationen

Operation Erl�uterung
Create(Schlange) Das Array fester L�nge wird mit leeren Eintr�gen (z.B Nullelementen) initialisiert. Der Zeiger î wird mit dem Wert Null initalisiert.
Empty(Schlange) Es wird gepr�ft, ob der Zeiger î den Wert 0 (R�ckgabe true) oder >0 (R�ckgabe false) hat.
Full(Schlange) Es wird gepr�ft, ob der Zeiger î auf das letzte Element den Wert des Index des Arrayelements hat(R�ckgabe true) oder kleiner ist (R�ckgabe false) hat.
Put(Schlange,Element) Das Element wird an die Stelle î +1 eingetragen. Der Wert des Zeigers î wird um 1 erh�ht.
Get(Schlange,Element) Das erste Element des Arrays wird entnommen. Alle anderen Elemente werden nach vorne durchgeschoben, indem jedes Element um einen Platz nach vorne umkopiert wird. Der Wert des Zeigers î wird um 1 verringert.
Top(Schlange,Element) Das erste Arrayfeld wird ausgelesen ohne es zu entfernen. Sonst erfolgt keine Ver�nderung des Arrays.

Diese Implementationsvariante mit einem Array hat folgende Vorteile:
  • Einfache Programmierbarkeit der Datenstruktur mit einem Array und einer Integer-Variable als Zeiger
  • Einfache Programmierbarkeit der Operationen
Deutlicher Nachteil dieser Variante ist allerdings:
  • Hoher Aufwand f�r das Umkopieren aller Arrayelemente beim Entnehmen (get) eines Schlangenelements.

(2) Implementation als Ringstruktur

Bei der Implementaion als Ringstruktur ben�tigt man drei Komponenten:
  • Ein Array fester L�nge n
  • Einen Zeiger  auf das erste Element der Schlange
  • Einen Zeiger Ê auf das letzte Element der Schlange
Dabei gilt:
  • das Array sei von 1 bis n durchnummeriert.
  • Das erste Element der Schlange steht an der Stelle, auf die der Zeiger  verweist
  • Das letzte Element der Schlange steht an der Stelle, auf die der Zeiger Ê verweist
  • Bei der leeren Schlange haben beide Zeiger den Wert Null

Bei der folgenden Abbildung enth�lt die Schlange die Elemente 12 27 33 40 50 83 25 und 55.
Auf das erste Element verweist der Anfangszeiger  . Auf das letzte Element verweist der Endzeiger Ê .
Die Elemente 13 100 und 22 sind nicht mehr in der Schlange enthalten. Sie wurden entnommen, indem der Zeiger  �ber sie hinweggesetzt wurde. Solche Elemente m�ssen nicht explizit gel�scht werden. Sie k�nnen sp�ter durch neue Schlangeneintr�ge �berschrieben werden.

13

100

22

12

27

33

40

50

83

25

55

 

 

 

 

 

 

 

Â

 

 

 

 

 

 

Ê

 

 

 

 

Algorithmische Umsetzung der Operationen

Operation Erl�uterung
Create(Schlange) Das Array fester L�nge wird mit leeren Eintr�gen (z.B Nullelemente) initialisiert. Die Zeiger  und Ê erhalten den Wert Null.
Empty(Schlange) Es wird gepr�ft, ob der Zeiger Ê den gleichen Wert wie der Zeiger  hat (R�ckgabe true) oder nicht (R�ckgabe false) hat.
Full(Schlange) Die Schlange ist voll, falls entweder  = 1 und Ê = n oder Ê +1 =  (R�ckgabe tue), sonst nicht.
Put(Schlange,Element) Falls not Full(Schlange) gilt, wird das Element an der Stelle Ê +1 mod n + 1 eingef�gt und Ê := Ê +1 mod n + 1 gesetzt.
Get(Schlange,Element) Das erste Element des Arrays wird entnommen. Der Anfangszeiger wird mit  :=  +1 mod n + 1 um eine Stelle in der Ringstruktur weitergeschoben.
Top(Schlange,Element) Das erste Arrayfeld wird ausgelesen ohne es zu entfernen. Sonst erfolgt keine Ver�nderung des Arrays und der Zeiger.

Diese Implementationsvariante mit einer Ringstruktur hat folgende Vorteile:
  • Verh�ltnism��ig einfache Programmierbarkeit der Datenstruktur mit Array und Integer-Variablen als Zeiger
  • Einfache Programmierbarkeit der Operationen �ber die Modulo-Operation (mod n + 1 ), wobei der Faktor 1 addiert werden mu�, wenn das Array von 1..n durchnummeriert wurde.
  • Gute Ausnutzung des durch die Arrayl�nge festgesetzten Speicherplatzes
  • Geringer Aufwand, weil f�r die Operationen put und get im Wesentlichen nur Zeiger umgesetzt werden m�ssen und keine Umspeicherung von Arrayelementen notwendig ist.
Nachteil dieser Variante ist allerdings:
  • Beim Initialisieren der Schlange festgelegte L�nge des Arrays.

(3) Implemenation als dynamischer Datentyp mit Zeigerstrukturen

Bei der Implementaion als dynamischer Datentyp ben�tigt man folgende elementare Datenstruktur:
  • Eine Datenstrukur TElement die aus:
    • einem Speicherplatz f�r ein Element und
    • einem Zeiger auf das n�chste Schlangenelement
    besteht.
Element1 —>     Element2 —>

Au�erdem wird eine Datenstruktur TSchlange ben�tigt, die aus folgenden Komponenten besteht:
  • Ein Zeiger  , der auf das erste Element der Schlange verweist.
  • Ein Zeiger Ê , der auf das letzte Element der Schlange verweist.
Dabei gilt:
  • Der Zeiger  verweist auf das erste Element der Schlange.
  • Der Zeiger Ê verweist auf das letzte Element der Schlange.
  • Bei der leeren Schlange zeigen beide Zeiger ins Nichts (nil).
  • Die Schlange besteht also aus aneinanderh�ngenden Elementarstrukturen vom Typ TElement


Element1 —> Element2 —> Element3 —> Element4 —>
 Ê

Algorithmische Umsetzung der Operationen

Operation Erl�uterung
Create(Schlange) Die Zeiger  und Ê verweisen auf nichts (nil).
Empty(Schlange) Es wird gepr�ft, ob die Zeiger Ê und  beide den Wert nil haben (R�ckgabe true) oder nicht (R�ckgabe false).
Full(Schlange) Die Schlange ist voll falls der zur Verf�gung stehende Speicherplatz des Rechners aufgebraucht ist.
Put(Schlange,Element) Es wird eine neues Element vom Typ TElement erzeugt. Sein Zeiger wird auf das aktuelle letzte Element der Schlange gerichtet. Der Zeiger Ê wird auf das neu eingetragene Element gerichtet.
Get(Schlange,Element) Das erste Element der Schlange wird entnommen. Der Anfangszeiger wird auf den Vorg�nger des ersten Elements gerichtet. Der f�r das entnommene Element reservierte Speicherplatz wird wieder freigegeben.
Top(Schlange,Element) Das erste Arrayfeld wird ausgelesen ohne es zu entfernen. Sonst erfolgt keine Ver�nderung der Zeiger.

Diese Implementationsvariante als dynamische Datenstruktur mit Zeigern hat folgende Vorteile:
  • Gute Ausnutzung des rechnerabh�ngigen Speicherplatzes, da immer nur so viel Speicherplatz zur Verf�gung gestellt werden muss, wie ben�tigt wird.
  • Geringer Aufwand, weil f�r die Operationen put und get im Wesentlichen nur Zeiger umgesetzt werden m�ssen.
Nachteil dieser Variante ist allerdings:
  • Aufwendige und fehleranf�llige Programmierung (pointer).

 

 

 
  � 2002 Gesamtschule Duisburg-Hamborn/Neumühl.  
Hosted by www.Geocities.ws

1