• Keine Ergebnisse gefunden

Implementieren Sie den ADT Queue mit Hilfe einer verketteten Liste ohne einen Dummy- Knoten zu verwenden.

N/A
N/A
Protected

Academic year: 2022

Aktie "Implementieren Sie den ADT Queue mit Hilfe einer verketteten Liste ohne einen Dummy- Knoten zu verwenden."

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Information Hiding

• Erklären Sie "Information hiding" (d.h. das

Verstecken von Daten) und wozu ist das gut?

(2)

Implementieren Sie den ADT Queue mit Hilfe einer verketteten Liste ohne einen Dummy- Knoten zu verwenden.

Übung FIFO-Warteschlange (Queue)

public abstract class Queue {

public abstract void clear();

public abstract char get();

public abstract int getSize();

public abstract boolean isEmpty();

public abstract void put(char val);

}

(3)

Queue mit verketteter Liste

F R

I

F

I

R

F R

I

put('F');

put('I');

put('R');

(4)

public class Node { Node next;

char val;

Node(char val) { this.val = val;

this.next = null; } }

public class Queue0 extends Queue { private Node head, tail;

private int size;

public Queue0() { clear(); }

public void clear() { head = tail = null;

size = 0; }

public int getSize() { return size; }

...

Lösung mit verketteter Liste (1)

(5)

Lösung mit verketteter Liste (2)

...

public char get() { char val = head.val;

head = head.next;

size--;

return val; }

public boolean isEmpty() { return (head == null); }

public void put(char val) { Node n = new Node(val);

if(isEmpty()) head = n;

else

tail.next = n;

tail = n;

size++; } }

(6)

Implementieren Sie den gleichen ADT Queue mit Hilfe eines Arrays.

Übung FIFO-Warteschlange (Array)

public abstract class Queue {

public abstract void clear();

public abstract char get();

public abstract int getSize();

public abstract boolean isEmpty();

public abstract void put(char val);

}

(7)

Queue mit Array

put('F');

put('I');

put('R');

put('S');

get();

put('T');

get();

put('I');

put('N');

(8)

public class Queue1 extends Queue { private int n, head, tail;

private char[] q;

public Queue1(int max) { q = new char[max+1];

n = max + 1;

clear(); }

public void clear() { head = tail = 0; } public char get() {

char val = q[head++];

head = head % n;

return val; }

public int getSize() { return (tail >= head)

? tail - head : n - Math.abs(tail - head);

} ...

Lösung mit Array (1)

(9)

Lösung mit Array (2)

...

public boolean isEmpty() {

return (head == tail);

}

public void put(char val) {

q[tail++] = val;

tail = tail % n;

} }

Referenzen

ÄHNLICHE DOKUMENTE

Aktuell sind im Kanton Bern rund 25 transport- und mengenrele- vante Materialabbaustellen und Deponien (s. auch Kapitel 12.2.2) in Betrieb, was rund 20 % aller Betriebe

• Die Methode merge ist so zu implementieren, dass die Knoten der übergebenen Liste list dupliziert und in die durch this referenzierte Liste einsortiert werden. Verwenden Sie

• int getId() liefert eine Zahl die den Prozess eindeutig identifiziert; vergeben Sie für jedes neue Objekt der Klasse Process eine fortlaufende Nummer; der erste mit new

Der Kellerspeicher hat folgende Methoden: push kellert eine Zahl ein, pop kellert eine Zahl aus, size liefert die Anzahl der Zahlen und iterator liefert einen Iterator mit dem

Implementieren Sie eine FIFO-Warteschlange (First-in-first-out) für Zeichen, einmal mit einem Array in der Klasse ArrayQueue (zyklischer Puffer, Array mit fixer Größe) und einmal

Implementieren Sie eine FIFO-Warteschlange (First-in-first-out) für Objekte, einmal mit einem Array in der Klasse ArrayQueue (zyklischer Puffer, Array mit fixer Größe) und einmal

Implementieren Sie einen Kellerspeicher für Objekte, einmal mit einem Array in der Klasse ArrayStack und einmal als verkettete Liste in der Klasse LinkedListStack.. Die

Doppelt verkettete Listen bestehen aus Listenzellen mit zwei Zeigern. • Ein Zeiger prev auf die