Portal > Foren > Java > Allgemeine Java-Programmierung > Doppeltverkettete Liste : remove(Elem e)
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 10.08.2005, 09:09 Nach oben    #1
taik84
Gast
 
Beiträge: n/a
Standard Doppeltverkettete Liste : remove(Elem e)

Hallo Leutz!!!

Ich habe folgendes: Ich möchte aus einer doppelt verketteten Liste alle Elemente löschen, deren boolean Variable selected==true ist. Die Liste kann 0,1,2,3,...,n Elemente enthalten. Und es können 0,1,2,3,...,n Elemente mit selected == true sein (maximal alle, minimal keiner).

Leider Schaffe ich nicht alle Möglichkeiten abzufangen und lande ständig in der unendlichen Schleife. Kann mir bitte jemand helfen.

Ein paar Infos zu den Klassen:
Class Elem:
PHP-Code:
Elem prev
Elem next
boolean selected
public 
boolean getSelected(){...} 
public 
void setSelected(boolean v){...} 
Class Liste:
PHP-Code:
public void removeSelected() { 
.......
....... 
....... 

public 
void remove() { 
....... 
....... 
....... 

Gruß

Taik
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.08.2005, 19:04 Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Ungetesteter Code:

Code:
public void remove() {
  prev->next = next;
  next->prev = prev;
}
Den Rest macht ja die Garbage Collection. Sollte prev/next null sein ist das auch kein Problem, dann ist halt prev->next auch null...

Code:
public void removeSelected() { 
  Elem e = this;
  while (e->prev != null) {
     e = e->prev;
      if (e->getSelected())
         e->remove();
  }
  e = this;
  while (e != null) {
      if (e->getSelected())
         e->remove();
     
       e = e->next;
  }
}
Allerdings hast du in beiden Fällen das Problem dass du die Liste "verlieren" könntest - d.h. wenn du e->remove() aufrufst von aussen, dann ist e ja kein Element der Liste mehr...

Generell finde ich verkette Listen eher blöd - der Verwaltungsaufwand ist recht hoch. In den meisten Fällen fährst du mit etwas Speicherblockbasiertem (Array bzw. darauf aufbauend Vector/ArrayList) besser als mit einer verketteten Liste.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.08.2005, 20:54 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.512
Standard

Ähm ... "->" sollte doch "." sein, oder? :confused:
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.08.2005, 00:51 Nach oben    #4
taik84
Gast
 
Beiträge: n/a
Standard

Wenn die Gefahr besteht, die Liste zu Verlieren, wenn man irgendwas ander Liste ändert, wäre dann denn sinnvoll sie als bestand einer Programmiersprache aufzunehmmen? Java hat ja so was ähnliches. Oder irre ich mich da?

So weit war ich schon mal mit dem Code und habe ständig NullPointerException bekommen oder bin der Unendlichschleife gelandet.

Klar ist der Aufwand etwas größer als bei einer Vorgegebenen Klasse aber es dient besserem Verständniss, wie die Listen allgemein funktionieren. Oder sehe ich es falsch?!

Gruß

Taik
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.08.2005, 16:10 Nach oben    #5
Benutzer
 
Benutzerbild von mr1st
 
Registriert seit: 08.02.2005
Ort: Wien
Beiträge: 85
Standard

So hab ich es bei meiner DLL, die ich mal zu Lernzwecken selbst programmiert habe.
Code:
public void remove(Elem elem)
{ elem.prev.next = elem.next;
  elem.next.prev = elem.prev;   
}
__________________
Kosmetik Hobby
mr1st ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.08.2005, 20:48 Nach oben    #6
matt
Gast
 
Beiträge: n/a
Standard

Ähm leute, ihr habt da alle ein paar gravierende Fehler...

prinzipiell funktioniert das hier nicht richtig (man glaubt es nur)

elem.prev.next = elem.next;
elem.next.prev = elem.prev;

hat aber peschmae bereits erwähnt, das problem ist, dass wenn elem.prev null ist, bzw. elem.next null ist hast du hier eine Null Pointer Exception.

Beheben kann man das mit einem simplem if...

Wenn man jetzt aber ein "LinkList" Objekt hat, dass beispielsweise eine Referenz zu dem ersten und dem Letzten Objekt besitzt (was mitunter ganz praktisch ist) muss man weiterhin aufpassen, denn wenn man das erste oder das letzte element aus der liste wirft, muss man ausserdem die referenz im LinkedList element ändern sonst kann es zu ganz komischen effekten kommen...
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.08.2005, 09:44 Nach oben    #7
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Zitat:
Zitat von Ben
Ähm ... "->" sollte doch "." sein, oder? :confused:
Ähm, ja

Zitat:
Wenn die Gefahr besteht, die Liste zu Verlieren, wenn man irgendwas ander Liste ändert, wäre dann denn sinnvoll sie als bestand einer Programmiersprache aufzunehmmen? Java hat ja so was ähnliches. Oder irre ich mich da?
Achso, nein, ich war wohl wirklich noch etwas zu sehr bei C - da hätte man jetzt pointer-pointer benutzt
Du hast ja zwei Klassen - kein Problem eigentlich.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Liste im IE 6.x & 7.x Berti HTML, XML und CSS 1 31.03.2007 13:49
Liste der größten, aktivsten Webseiten/Portale/.. Deutschlands Ben Gesuche 9 02.03.2007 21:36
Gemeinschaftsprojekt: Liste interessierter Mitglieder Ben Archiv 0 22.01.2006 17:49
Liste mit Objekten einer Klasse nach Property sortieren Michael.Schmuck Allgemeine Java-Programmierung 4 22.02.2005 18:26
Listen Fienchen Allgemeine Java-Programmierung 1 29.01.2005 18:14


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45