Doppelt verkettete Liste

Status
Nicht offen für weitere Antworten.
J

jefo

Gast
Hallo,

wer kann mir helfen bei der Implementierung von doppelt...
Was soll dieser Rückgabewert List? List ist doch interface.
ich weiss wir haben es schon 1000 mal gemacht aber trotzdem interessiert mich es mit dem Interface.
Code:
interface List {
    int len();               // liefert die Laenge der Liste
    boolean isempty();       // prueft, ob die Liste leer ist
    Object first();          // liefert das erste Element der Liste
    Object last();           // liefert das letzte Element der Liste
    List rest();             // liefert die Liste ohne das erste Element
    void append(Object o);   // haengt ein Objekt an das Ende der Liste an
    void print();            // gibt die Elemente mit Hilfe der toString()-Methode aus
    List remove(Object o);   // entfernt alle Objekte o aus der Liste und liefert diese
                             // Liste als Ergebnis
    List removeLast(Object o, int n);
                             // entfernt die letzten n Vorkommen von Objekten o aus der
                             // Liste und liefert die Liste als Ergebnis. Sind weniger
                             // als n Vorkommen von Objekten o in der Liste enthalten,
                             // stimmt die Semantik des Aufrufs von
                             // removeLast(Objekt o, int n) mit derjenigen von
                             // remove(Object o) ueberein.
}

Code:
class Test {
    public static void main(String[] argf) {
        Test.test(new PList());
    }
    static void test(List l) {
        // Liste aufbauen
        for (int i=0; i<6; i++) l.append(new Integer(i));
            l.append(new Integer(2));
            l.append("Hallo World");
        // Liste ausgeben
        l.print();
        System.out.println();
        // Bis zu 3 Integerzahlen mit Wert 2 loeschen und Liste ausgeben
        //l.removeLast(new Integer(2), 3);
        //l.print();
        System.out.println();
        // Alle Vorkommen von ’Hallo World’ loeschen, Floats hinzufuegen
        //l.remove("Hallo World");
        for (int i=0; i<4; i++) l.append(new Float(i/0.008));
        // Ausgabe der enthaltenen Elemente ueber l.first()
        while (!l.isempty()) {
            System.out.println(l.first().toString());
            //l = l.rest();
        }
    }
}

Implementieren Sie die Schnittstelle List in einer Klasse PList als doppelt
verkettete Liste so, dass das Programm test.java
folgende Ausgabe liefert:

0
1
2
3
4
5
2
Hallo World
0
1
3
4
5
Hallo World
0
1
3
4
5
0.0
125.0
250.0
375.0

ich habe es versucht aber habe feststellen müssen, dass anstatt PList List Rückgabetyp ist. das verwirrt mich nur.
Code:
class PList implements List{
  private PList vorcheriger;
  private PList naechster;
  private PList first;
  private Object o;

  public PList(){
    first = null;
  }

  private PList(Object o){
    this.o = o;
  }

  public boolean isempty(){
    return(first == null);
  }

  public void append(Object o){
    PList neu = new PList(o);
    neu.naechster = first;
    neu.vorcheriger = null;
    if(neu.naechster != null){
      PList temp = neu.naechster;
      temp.vorcheriger = neu;
    }
    first = neu;
  }

  public Object first(){
    return(first.o);
  }

  public void print(){
    PList aktuell = first;
    while(aktuell != null){
      aktuell.toString();
    }
  }


  int len(){

  }

  Object last(){
       blabla
  }
  List rest(){
     blabla
  }
  List remove(Object o){
       blabla
  }
  private List removeLast(Object o, int n){
          blabla
  }
}
 
B

Beni

Gast
Irgendetwas implementiert ja dieses Interface. Und das kannst du dort zurückgeben. (Eben halt etwas vom Typ "List").

Und hier ist wohl gedacht, dass du sowas schreibst:

Code:
public List remove( Object o ){
  // blabla

  return this;
}
 
G

Guest

Gast
Kannst Du mir es etwas näher beschreiben. (eine Methode implementieren oder etwas ähnliches)

Danke.
 
B

Beni

Gast
"implementieren" ist ein Wort, das man auch mit "schreiben", "coden" oder "herstellen" übersetzt.

"implementieren" ist auch die dt. Übersetzung von "implements" und wird verwendet, wenn eine Klasse ein Interface implementieren soll.

z.B. PList implements List heisst nichts anderes als "PList implementiert alle Methoden die in List vorgegeben sind"

Bsp:
Die Implementation von "first()"
Code:
  public Object first(){
    return(first.o);
  }
 
G

Guest

Gast
Ok, verstanden. Aber als Beispiel wie soll ich diese Methode implementieren:
Code:
public List removeLast(Object o, int n){ 
          blabla 
  }
 
B

Beni

Gast
( Ich frage mich, ob es nicht sinnvoller wäre, wenn die Daten in einer "Node"-Klasse gespeichert wird, und die PList nur die Schnittstelle nach aussen ist. Das wäre auch der normale Weg eine Liste zu schreiben.

Beispiel, als Pseudocode:
Code:
public void append( Object o ){
  Node node = new Node( o );
  lastNode.setNext( node );
  node.setPreviousNode( lastNode );
  lastNode = node;
}
)



So, aber falls du an deiner Lösung festhalten willst:
Hier ein Denkanreiz. Diese Version entfernt die Elemente von vorne her (im Interface wird gesagt, es soll von hinten her gehen. Aber das umschreiben wird ja kein Problem sein).

Code:
public List removeLast(Object o, int n){
  PList list = first;

  for( int i = 0; i < n && list != null ; i++ ){
    if( list.o == o ){
      PList prev = list.vorcheriger;

      if( prev != null )
        prev.naechster = naechster;

      if( naechster != null )
        naechster.vorcheriger = vorcheriger;
    }

    if( list == first )
      first = list.naechster;

    list = list.naechster;
  }
  return first;
}

Beni
 
G

Guest

Gast
Ok ich habe diese Klasse so entwickelt und die Methoden so implementiert ;-)
Aber mit der Methode rest() habe ich Schwierigkeiten es funktioniert nicht wie es sein sollte (siehe Ausgabe). Vielleicht ein kleines Tipp. Ich habe zusätzlich die Methode
printBack() implementiert um zu sehen, ob die Objekte richtig ausgehängt werden.
Acha die remove() Methoden sind ziemlich kompliziert geworden, vielleicht geht es einfacher. Vielen Dank für jegliche Hilfe.

Code:
public class PList implements List{
  private PList vorcheriger;
  private PList naechster;
  private PList first;
  private PList letzte;
  private Object o;

  public PList(){
      first = null;
  }

  private PList(Object o){
      this.o = o;
  }

  public boolean isempty(){
      return(first == null);
  } 

  public void insert(Object o){
      PList neu = new PList(o);
      neu.naechster = first;
      neu.vorcheriger = null;
      if(neu.naechster != null){
          PList temp = neu.naechster;
          temp.vorcheriger = neu;
      }
      first = neu;
  }
  public void append(Object o){
    PList neu = new PList(o);
    if(first == null){
      neu.vorcheriger = null;
      neu.naechster = null;
      first = neu;
      letzte = first;
    }else{
      letzte.naechster = neu;
      neu.vorcheriger = letzte;
      neu.naechster = null;
      letzte = neu;
    }
  }

  public Object first(){
      return (first.o);
  }

  public void print(){
    System.out.println("od przodu: "); 
      PList aktuell = first;
      while(aktuell != null){
          System.out.println(aktuell.o.toString());
          aktuell = aktuell.naechster;
      }
  }
  
  public void printBack(){
      System.out.println("od tylu: "); 
      PList aktuell = letzte;
      while(aktuell != null){
          System.out.println(aktuell.o.toString());
          aktuell = aktuell.vorcheriger;
      }
  }

  public int len(){
    PList aktuell = first;
    int i = 0;
    while(aktuell != null){
        i++;
        aktuell = aktuell.naechster;
    }
      return i;
  }

  public Object last(){
      return letzte.o;
  }

  public List rest(){
    first = first.naechster;
    return first;
  }

  
  
  public List remove(Object o){  
    PList aktuell = letzte;
      while(aktuell != null){
        if(aktuell.o.toString().equals(o.toString())){
          PList prev = aktuell.vorcheriger;
          if(prev != null){ 
            prev.naechster = aktuell.naechster;
          }
          if(aktuell.naechster != null){
            aktuell.naechster.vorcheriger = aktuell.vorcheriger;
          }else{
            letzte = aktuell.vorcheriger;
          }
          if(prev != null){
            aktuell = prev.vorcheriger;
          }else{
            first = aktuell.naechster;
          }
          
        }else{
          aktuell = aktuell.vorcheriger;
        }
      }
      return letzte;
    }

  public List removeLast(Object o, int n){
      PList aktuell = letzte;
      int z=0;
      while(aktuell != null){
        if(z == n) break;
          if(aktuell.o.toString().equals(o.toString())){
            z++;
            PList prev = aktuell.vorcheriger;
            if(prev != null){ 
              prev.naechster = aktuell.naechster;
            }
            if(aktuell.naechster != null){
              aktuell.naechster.vorcheriger = aktuell.vorcheriger;
            }else{
              letzte = aktuell.vorcheriger;
            }
            if(prev != null){
              aktuell = prev.vorcheriger;
            }else{
              first = aktuell.naechster;
            }
          
          }else{
            aktuell = aktuell.vorcheriger;
          }
        }
        return letzte;
      }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
R doppelt verkettete Liste: Fehler beim Einfügen Allgemeine Java-Themen 3
chik Doppelt verkettete Liste bzw. Zirkulärliste (kleiner Fehler, den ich nicht finde) Allgemeine Java-Themen 4
F Doppelt verkettete Liste sortieren? Allgemeine Java-Themen 8
M doppelt verkettete Listen Allgemeine Java-Themen 2
L Doppelt Verkettete Listen Allgemeine Java-Themen 6
M doppelt verkettete Listen? Allgemeine Java-Themen 5
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
D "Paste" String doppelt Allgemeine Java-Themen 14
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
Sin137 Interface Eingabe wird doppelt angezeigt Allgemeine Java-Themen 2
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
N Fehler abfang läuft doppelt durch Allgemeine Java-Themen 2
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
M Alles doppelt in Eclipse syntaxhilfe Allgemeine Java-Themen 6
C Vier Stellen Keine Doppelt (Zufall) Allgemeine Java-Themen 20
G Array doppelt verkettet? Allgemeine Java-Themen 6
L doppelt gelinkte liste /getFirst/removeFirst/clear/Remove Allgemeine Java-Themen 2
S Thread wird nach erneutem Instanzieren doppelt gestartet!? Allgemeine Java-Themen 4
I Doppelt verkette Listen Allgemeine Java-Themen 2
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
K verkettete Liste Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
T Verkettete Suche Allgemeine Java-Themen 6
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
L verkettete Listen oder Arrays + Indexlisten effizienter? Allgemeine Java-Themen 3
D Einfach verkettete Liste Allgemeine Java-Themen 3
X einfach verkettete Liste und Insertion Sort Allgemeine Java-Themen 3
R Verkettete Liste Allgemeine Java-Themen 5
E Verkettete Listen Allgemeine Java-Themen 5
M Schlange als verkettete Liste Allgemeine Java-Themen 4
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben