Interface und Listen...



  • Verstehe folgende Aufgabe nicht so ganz, also entweder scheint mir das zu simpel, oder extrem schwer, was würdet ihr da machen ????

    Vllt. mit kleinem Beispiel, für 2,3 Methoden....

    Aufgabe 1: Erstellen Sie eine Implementierung des folgenden Interfaces für eine doppelt verkettete Liste.
    public interface IDoubleLinkedList
    {
    /**
    * Inserts the given element at the beginning of this list.
    * @param anObject the element to be inserted at the beginning of this list.
    /
    public void addFirst(Object anObject);
    /
    *
    * Appends the given element to the end of this list.
    * @param anObject the element to be inserted at the end of this list.
    /
    public void addLast(Object anObject);
    /
    *
    * Inserts the given element before another element of this list.
    * @param before the element before which the other object is to be inserted.
    * @param anObject the element to be inserted before another element of this list.
    /
    public void insertBefore(Object before, Object anObject);
    /
    *
    * Inserts the given element after another element of this list.
    * @param after the element after which the other object is to be inserted.
    * @param anObject the element to be inserted after another element of this list.
    /
    public void insertAfter(Object after, Object anObject);
    /
    *
    * Removes and returns the first element from this list.
    * @return the first element from this list.
    /
    public Object removeFirst();
    /
    *
    * Removes and returns the last element from this list
    * @return the last element from this list.
    /
    public Object removeLast();
    /
    *
    * Removes all of the elements from this list.
    */
    public void clear();
    }

    Und dann noch folgendes:

    Anleitung: Verwenden Sie zur Realisierung der Einträge der Liste eine innere Klasse, die Referenzen auf
    den Vorgänger und den Nachfolger sowie den eigentlich Eintrag enthält.

    Das verstehe ich dann nämlich gar nicht mehr....



  • wir sollten ne doppelt verkettete liste schreiben, u.a. mit ner inneren Klasse, die man nutzt um ein Elemenet zu erstellen, welches auch gleichzeitig auf seinen vorgänge rund Nachfolger zeigt.

    Soweit zu gut alles, das meiste bisher geht auch, nur folgende komische Situation nicht:

    Wenn ich folgende Elemente in der Liste habe:

    a
    b
    c
    d

    dann kann ich problem los mit meiner insertAfter Methode, nach b z.b. "bb" was einfügen, die Liste ausgeben lasen, das letzte Element löschen lassen, wieder ausgeben lassen, dann steht korrekt

    a
    b
    bb
    c

    da.

    (Nach dem letzten Element einfügen kann noch nicht klappen bei mir), jedoch wenn ich von meiner ausgangsliste nach c, also dem vorletzten Element etwas einfüge, und die liste ausgebe, ist es zunächst korrekt, doch wenn ich dann das letzte element löschen lassen, werden die letzten beiden, also das vona nfang an letzte, und das eingefügte element gelöscht.

    Ich weiss absolut nicht wo der fehler liegt, vllt. findet ihn ja jemand.

    Hier die relevanten programmierteile:

    public class DoubleLinkedList implements IDoubleLinkedList{
    
       ListElement start;     // The start of the double linked list
       ListElement end;       // The end of the double linked list
       ListElement help;    // an element used for insertions
    
    // innere Klasse:
    
     public class ListElement
       {
    	  ListElement before;  // The Element of the List BEFORE this one
    	  ListElement after;   // The Element of the List AFTER this one
    	  Object entry;        // The entry wich is saved in each List Element
    
    	  /**
    	   * The constructor with a parameter
    	   * @param newEntry The entry wich is to be saved in the element
    	   */
    	  ListElement(Object newEntry)
    	  {
    		 entry = newEntry;      
    	  }
       }
    
     public void insertAfter(Object after, Object anObject)
       {
    	  if(anObject == null || after == null)
    		 throw new IllegalArgumentException("Es wird kein Object übergeben");
    
    	  ListElement element = new ListElement(anObject);
    	  ListElement search = start;
    
    	  while(search.entry != after || search == end)   
    	  {
    		 search = search.after;    
    	  }
    
    	  help = search;
    	  element.after = search.after;
    	  element.before = search;
    	  search.after = element;
    	  help.after.before = element;
       }
    
     public Object removeLast()
       {
    	  if(start == null)
    	   throw new NullPointerException("Die Liste ist leer.");
    
    	  help = end;
    	  end = end.before;
    	  end.after = start;
    
    	  return help;
       }
    
     public void output()
       {
    	  if(start == null)
    		 System.out.println("Die Liste ist leer.");
    	  else
    	  {
    		 ListElement outputElement;
    		 outputElement = start;
    		 do
    		 {
    			System.out.println(outputElement.entry);
    			outputElement = outputElement.after;
    		 }
    		 while(outputElement != end.after);
    
    	  }
    

Anmelden zum Antworten