online 1
gast (50)

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

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Susi19 vom 02.01.2020, 11:38 Options

doppelt verkettete Listen

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 schreiben

Antwort 1 von Woo vom 08.01.2020, 09:26 Options

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.

Ähnliche Themen

Mails kommen doppelt an und gehen doppelt raus
Ted  03.02.2007 - 221 Hits - 1 Antwort

Junk-E-Mail-Listen sind voll
Nyte  03.07.2007 - 147 Hits - 4 Antworten

MSN-Virus nicht löschbare MRU-Listen
sykk  13.11.2007 - 79 Hits - 8 Antworten

mehrere Listen zusammenfassen
aufarbeit  29.11.2007 - 161 Hits - 1 Antwort

sehen in wessen icq-listen man ist
hermanG  03.06.2008 - 62 Hits - 15 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 20:06:00 2026