A D T   H e a p

Beispielprogramm 1:   Heapoperationen




PROGRAM  heap_anwendung_1;{
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anwendungsbeispiel "Heapoperationen", HMO, Juni 1988 / Dez. 1994

Verwenden Sie den ADT Heap für ein Programm, das die Heapoperationen
"create_heap", "in_heap", "delbest_heap" und "clean_heap" veranschaulicht.
Das Programm soll nach Wahl einen Minimum- oder Maximum-Heap bearbeiten
können. Nutzen Sie die Array-Struktur aus, um zusätzlich den ganzen Heap
ausgeben zu können.}

USES Crt;

CONST     n_heap         = 25;      {max. Heapgröße}
TYPE      inhalt_heap    = Char;    {Inhalt der Heapknoten incl. Bewertung}

FUNCTION  kleinergleich (b,a: inhalt_heap): Boolean;
BEGIN     kleinergleich:=(b<=a)  END;

FUNCTION  groessergleich (b,a: inhalt_heap): Boolean;
BEGIN     groessergleich:=(b>=a)  END;

{$I HPADT.PAS}

VAR  heap: heap_typ;
     c,b : Char;
     i   : Integer;

BEGIN
  Clrscr;
  Writeln('BEISPIEL 1 zum ADT HEAP :  H E A P O P E R A T I O N E N');
  Writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
  Writeln('Operationen auf einem Heap von 0..',n_heap,' Characters.');
  heap.art := undef_heap;
  REPEAT
    Writeln;
    Write('HEAP-MENÜ: (C)reate  (I)n_Heap  (D)el_Best  c(L)ean_Heap  (Q)uit  ');
    REPEAT c:=Upcase(Readkey);
    UNTIL c IN ['C','I','D','Q','L']; Writeln(c);
    CASE c OF
      'C': BEGIN
             Writeln; Write('Art des HEAPS:  M(I)nimum   M(A)ximum ');
             REPEAT c:=Upcase(Readkey);
             UNTIL c IN ['I','A'];
             Writeln(c); Writeln;
             IF c='I' THEN create_heap(heap,min_heap)
                      ELSE create_heap(heap,max_heap)
           END;
      'I': IF (heap.art=undef_heap) OR full_heap(heap)
           THEN Writeln(#7)
           ELSE BEGIN
             Writeln; Write('Zeichen zum Einfügen in den Heap: ');
             b:=Readkey; Writeln(b); Writeln; in_heap(heap,b)
           END;
      'D': IF (heap.art=undef_heap) OR empty_heap(heap)
           THEN Writeln(#7)
           ELSE BEGIN
             best_heap(heap,b); delbest_heap(heap);
             Writeln;
             Writeln('Der beste Wert ist > ',b,' <  und der wird entfernt.');
             Writeln
           END;
      'L': IF (heap.art=undef_heap) OR empty_heap(heap)
           THEN Writeln(#7)
           ELSE BEGIN
             Writeln; Write('Vergleichswert zum Aufräumen des Heaps: ');
             b:=Readkey; Writeln(b); Writeln;
             clean_heap (heap,b)
           END
    END;
    IF c<>'Q'
    THEN BEGIN
      IF heap.art = min_heap THEN Write('MinHeap') ELSE Write('MaxHeap');
      Write('[',n_heap,'] belegt=',count_heap(heap),' : ');
      FOR i := 1 TO count_heap(heap) DO Write(heap.feld[i],' '); Writeln
    END
  UNTIL c='Q'
END.




HTML-Texte: Heapoperationen Heapsort Priority Queue Branch & Bound ADT Heap HAUPTTEXT
Paket mit Pascal-Dateien laden: HeapPac.Zip   (39 K)

zur Informatik-Leitseite


© HMO, Neubearbeitung Januar 1998