PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl...

Post on 05-Apr-2015

103 views 0 download

Transcript of PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl...

PRJ 2007/1Stefan Dissmann

Verkettete datenstruktur: Liste

Problem:Liste, die eine beliebige Zahl von Elementen verwaltet

• Operationen:Erzeugen, Anfügen, Anfang lesen, Anfang löschen, Leerheitstest

• Zunächst zur Vereinfachung:Jedes Element enthält nur eine ganze Zahl.

PRJ 2007/2Stefan Dissmann

Verkettete datenstruktur: Liste

Problem:Liste, die eine beliebige Zahl von Elementen verwaltet

• Operationen:Erzeugen, Anfügen, Anfang lesen, Anfang löschen, Leerheitstest

• Zunächst zur Vereinfachung:Jedes Element enthält nur eine ganze Zahl.

Lösung:Jedes Element kennt nur genau seinen Nachfolger verkettete Datenstruktur

PRJ 2007/3Stefan Dissmann

Idee der Verkettung

17

1. für jedes Element ein Objekt anlegen

PRJ 2007/4Stefan Dissmann

Idee der Verkettung

17 9

1. für jedes Element ein Objekt anlegen

2. Objekt kennt weiteres Objekt

PRJ 2007/5Stefan Dissmann

Idee der Verkettung

17 9 33

1. für jedes Element ein Objekt anlegen

2. Objekt kennt weiteres Objekt

3. und so fort …

PRJ 2007/6Stefan Dissmann

Technische Umsetzung: Element

1. Problem:Klasse für einzelnes Element der Liste entwickeln

PRJ 2007/7Stefan Dissmann

Technische Umsetzung: Element

1. Problem:Klasse für einzelnes Element der Liste entwickeln

public class IntElement {

}

PRJ 2007/8Stefan Dissmann

Technische Umsetzung: Element

1. Problem:Klasse für einzelnes Element der Liste entwickeln

public class IntElement {

private int wert;

}

PRJ 2007/9Stefan Dissmann

Technische Umsetzung: Element

1. Problem:Klasse für einzelnes Element der Liste entwickeln

public class IntElement {

private int wert;

private IntElement nachfolger;

}

PRJ 2007/10Stefan Dissmann

Technische Umsetzung: Element

Und Konstruktor und Methoden ergänzen:

PRJ 2007/11Stefan Dissmann

Technische Umsetzung: Element

Und Konstruktor und Methoden ergänzen:

public class IntElement {

private int wert;

private IntElement nachfolger;

public IntElement(int w) {

wert = w;

nachfolger = null;

}

public void verkette(IntElement n) {

nachfolger = n;

}

}

PRJ 2007/12Stefan Dissmann

Technische Umsetzung: Element

Und Konstruktor und Methoden ergänzen:

public class IntElement {

private int wert;

private IntElement nachfolger;

public IntElement(int w) {

wert = w;

nachfolger = null;

}

public void verkette(IntElement n) {

nachfolger = n;

}

}

PRJ 2007/13Stefan Dissmann

Technische Umsetzung: Element

Und weitere Methoden:

public class IntElement {

public IntElement gibNachfolger() {

return nachfolger;

}

public int gibWert() {

return wert;

}

}

PRJ 2007/14Stefan Dissmann

Technische Umsetzung: Liste

2. Problem:Klasse für Liste von ganzen Zahlen entwickeln

PRJ 2007/15Stefan Dissmann

Technische Umsetzung: Liste

2. Problem:Klasse für Liste von ganzen Zahlen entwickeln

public class IntListe {

public IntListe() {…};

public void fügeAn(int w) {…};

public int gibErstes() {…};

public void löscheErstes() {…};

public boolean leer() {…};

}

PRJ 2007/16Stefan Dissmann

Technische Umsetzung: Liste

… und Attribute ergänzen:

public class IntListe {

private IntElement anfang, ende;

public IntListe() {…};

public void fügeAn(int w) {…};

public int gibErstes() {…};

public void löscheErstes() {…};

public boolean leer() {…};

}

PRJ 2007/17Stefan Dissmann

Implementierung: Liste

… und implementieren:

public IntListe() {

anfang = ende = null;

}

PRJ 2007/18Stefan Dissmann

Implementierung: Liste

… und implementieren:

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

PRJ 2007/19Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

} anfang ende

null

PRJ 2007/20Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

} wert nachfolger

neu

anfang ende

null

PRJ 2007/21Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

} wert nachfolger

neu

null

anfang ende

PRJ 2007/22Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

null

anfang ende

wert nachfolger

neu

PRJ 2007/23Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

wert nachfolger

wert nachfolger

anfang ende

wert nachfolger

neu

PRJ 2007/24Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

wert nachfolger

wert nachfolger

anfang ende

wert nachfolger

neu

PRJ 2007/25Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

wert nachfolger

wert nachfolger

anfang ende

wert nachfolger

neu

PRJ 2007/26Stefan Dissmann

Implementierung: Liste

public int gibErstes() {

if (anfang != null)

return anfang.gibWert();

else

return 0;

}

PRJ 2007/27Stefan Dissmann

Implementierung: Liste

public boolean leer() {

return anfang == null;

}

PRJ 2007/28Stefan Dissmann

Implementierung: Liste

public void löscheErstes() {

if (anfang != ende) {

anfang = anfang.gibNachfolger();

} else {

anfang = ende = null;

}

}

PRJ 2007/29Stefan Dissmann

Anwendung der Liste

IntListe zahlen = new IntListe();zahlen.fügeAn(19);

zahlen.fügeAn(3);

zahlen.fügeAn(28);

while (!zahlen.leer()) {

System.out.println(zahlen.gibErstes());

zahlen.löscheErstes();

}

PRJ 2007/30Stefan Dissmann

Anwendung der Liste

IntListe zahlen = new IntListe();zahlen.fügeAn(19);

zahlen.fügeAn(3);

zahlen.fügeAn(28);

while (!zahlen.leer()) {

System.out.println(zahlen.gibErstes());

zahlen.löscheErstes();

}

Anmerkung:Bei der Benutzung von IntListe wird IntElement nicht

benötigt!