Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

doppelt verkettete Listen





Frage

hey! ich muss die folgenden aufgaben lösen, komm da aber nich weiter.. Im Folgenden sollen Listen erstellt werden, deren Zellen jeweils mit den vorhergehenden und nachfolgenden Zellen verbunden sind - sog. doppelt verkettete Listen. Verwenden Sie f¨ur diese Aufgabe keine Klassen aus dem Paket java. util . a) Schreiben Sie eine Klasse Cons2, die analog zur Klasse Cons f¨ur einfach verkettete Listen, eine einzelne Zelle der Liste realisiert. public class Cons { public Object obj; // das Objekt in dieser Zelle public Cons next; // Verweis auf die naechste Zelle public Cons(Object obj) { this.obj = obj; next = null; } } b) Schreiben Sie eine Klasse Cons2List, die eine doppelt verkettete Liste aus Cons2- Zellen implementiert. Implementieren Sie dazu alle public Methoden der Klasse ConsList mit der gleichen Semantik. public class ConsList { private Cons head, foot; // Kopf und Fuss der Liste public ConsList() { head = foot = null; /* neue leere Liste */ } public boolean contains(Object obj) { return contains(head, obj); } protected boolean contains(Cons cons, Object obj) { if (cons == null) return false; else if (cons.obj == obj) return true; else return contains(cons.next, obj); } public void print() { System.out.print("Liste ["); print(head); // rekursive Ausgabe der Cons-Zellen System.out.println("]"); } protected void print(Cons cons) { if (cons == null) return ; // letzte Zelle erreicht System.out.print(cons.obj); // Objekt ausgeben if (cons.next != null) { System.out.print(", "); print(cons.next); // Rekursiv weiter } } public void insert(Object obj) { Cons cons = new Cons(obj); // neue Cons-Zelle cons.next = head; // vorne anfuegen.. head = cons; // .. und Kopf der Liste anpassen if (foot == null) foot = cons; // eventuell auch den Fuss } public void append(Object obj) { Cons cons = new Cons(obj); // neue Cons-Zelle if (foot == null) head = foot = cons; // genau eine Cons-Zelle else { // hinten anfuegen und Fuss anpassen foot.next = cons; foot = cons; } } public void remove(Object obj) { if (head == null) return ; if (head.obj == obj) { if (head == foot) foot = head = null; else head = head.next; // erste Cons-Zelle entfernen } else remove(head, head.next, obj); } protected void remove(Cons prev, Cons cons, Object obj) { if (cons == null) return ; if (cons.obj == obj) { // vorherige Cons-Zelle auf Nachfolgende zeigen lassen, // somit faellt 'cons' aus der Liste prev.next = cons.next; if (foot == cons) // evtl. Fuss anpassen foot = prev; } else remove(cons, cons.next, obj); } public boolean isEmpty() { return head == null; } public Object removeHead() { if (head == null) return null; Object res = head.obj; if (head == foot) head = foot = null; else head = head.next; return res; } public static void main (String ... args) { // Kleines Testprogramm fuer Listen: ConsList l = new ConsList(); System.out.println("leer? " + l.isEmpty()); String s1 = "Hallo", s2 = "Welt"; l.insert(s1); System.out.println("leer? " + l.isEmpty()); l.print(); l.insert(s2); l.print(); l.remove(s2); l.print(); l.append(s2); l.print(); l.remove(s2); l.remove(s1); l.print(); System.out.println("leer? " + l.isEmpty()); } } zwar versteh ich diesen Code, aber ich weiss nicht was/wo ich was verändern muss ( für doppel verketete..) ich weiss, ist viel Text/Code...aber kann mir jemand weiter helfen? :) gruß Susi

Antwort 1 von Woo

Moin!

Also als erstes muss deine Cons2 Klasse neben Next auch ein Pre haben.

public cons2 {
private Cons2 next;
priavte Cons2 pre;
private Object inhalt;
}


Somit haben deine Objekte in der Liste einen Vorgänger und einen Nachfolger.

In deiner jetzigen Umsätzung deiner Liste ist schon ein kleiner Fehler. In der vorliegenden einfach verketteten Liste hast du normalerweise nur einen Kopf und keinen Foot. Genau den hast du erst bei der doppelt verketteten Liste.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: