www.mucker.at http://www.mucker.at Helmut Mucker de Einfache verkettete Liste mit Java http://www.mucker.at/2008//07#liste <!-- amazon-search: Java Datenstrukturen --> <!-- amazon-mode: books --> <a onclick="window.open(this.href,'_blank');return false;" href="http://www.amazon.de/gp/product/3827370736?ie=UTF8&tag=muckerat-21&linkCode=as2&camp=1638&creative=6742&creativeASIN=3827370736"><img class="border alignleft" height="132" alt="Dieses Buch bei Amazon" src="http://images-eu.amazon.com/images/P/3827370736.03.MZZZZZZZ.jpg"></a><img src="http://www.assoc-amazon.de/e/ir?t=muckerat-21&l=as2&o=3&a=3827370736" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> <p> Dies ist Lektion (n+1) unserer Reihe "Einfache Datenstrukturen mit Java". Heute geht es um eine einfache verkettete Liste. <br/><br/> Unsere erste Klasse <b>ListElem</b> repräsentiert ein Element oder einen "Knoten" der Liste und bietet einige Methoden zur Manipulation derselben und zur Abfrage des Inhaltes eines Knotens und des nächsten Knotens an: <br clear="all"><pre> /** * Diese Klasse repräsentiert einzelnen Knoten * der verketteten * Liste. Sie bietet primitive Methoden zum * Setzen des Datums * und des next-Pointers. * @author Helmut Mucker * @version 1.0, */ public class ListElem { /** * Das Datum, welches im Knoten gespeichert wird. */ private Integer data; /** * Ein Zeiger auf den nächsten Listen-Knoten. */ private ListElem next; /** * Ein Konstruktor ohne Parameter */ public ListElem() { next = null; } public ListElem(Integer d) { data = d; next = null; } /** * Liefert den Inhalt des Knotens. * @return data */ public Integer getData() { return data; } /** * Liefert den Zeiger auf den nächsten Knoten. * @return next */ public ListElem getNext() { return next; } /** * Setzt den Inhalt des Knotens. */ public void setData(Integer d) { data = d; } /** * Setzt den Inhalt des Zeigers auf den nächsten * Knoten. */ public void setNext(ListElem n) { next = n; } /** * Liefert den Inhalt des Knotens als String. * @return String data */ public String toString() { return data.toString(); } } </pre> Die Klasse <b>List</b> repräsentiert dann die eigentliche Liste. Zum Probieren hat sie eine "main" Methode: In ihr sieht man beispielhaft, wie die Liste als Datenstruktur zu verwenden ist: <pre> import java.io.*; /** * Diese Klasse repräsentiert eine * verkettete Liste. * * @author Helmut Mucker * @version 1.0 */ public class List { /** * Ein Zeiger auf das erste Element der Liste */ private ListElem first; /** * Der default Konstruktor */ public List() { first = null; } /** * Dieser Konstruktor nimmt eine Zahl * als Parameter und erzeugt eine Liste. */ public List(Integer d) { first = new ListElem(d); } /** * Dieser Konstruktor nimmt ein ListElem * als Parameter und erzeugt eine Liste. */ public List(ListElem e) { first = e; } /** * Anhängen eines Elementes an die Liste * @return Die aktuelle Liste */ public List append(Integer d) { if (first == null) { first = new ListElem(d); } else { ListElem n = new ListElem(d); n.setNext(first); first = n; } return this; } /** * Liefert die gesamte Liste konkateniert als String. * @return Die aktuelle Liste */ public String toString() { String result = ""; ListElem n = first; while (n != null) { result = result + " " + n.getData(); n = n.getNext(); } return result; } /** * Zeigt an, on die Liste leer ist * @return true wenn leer, sonst false */ public boolean isEmpty() { if (first == null) { return true; } else { return false; } } /** * Liefert eine Liste, bestehend aus dem ersten * Element. * @return Liste oder null wenn leer. */ public List getFirst() { if (first != null) { List l = new List(first); return l; } else { return null; } } /** * Liefert eine Liste, bestehend aus allen * Elementen * ausser dem ersten Element. * @return Liste oder null wenn leer. */ public List getRest() { if (first != null) { List l = new List(first.getNext()); return l; } else { return null; } } /** * Liefert eine Liste, bestehend aus dem * letzten Element * der aktuellen Liste * @return Liste oder null wenn leer. */ public List getLast() { List loop = new List(first); List current = new List(first); if (loop != null) { // not empty while (loop.getRest() != null) { // next is defined current = loop; loop = loop.getRest(); } } return current; } public List concat(List l) { ListElem glue = new ListElem(); List last = this.getLast(); if (last == null) { first = l; } else { } } public static void main(String argv[]) { List l = new List(new Integer(2)); l.append(new Integer(3)); l.append(new Integer(6)); System.out.println(l.toString()); List r = l.getLast(); System.out.println(r.toString()); } } </pre> <!-- amazon_textlink:3898641317 --> <!-- amazon_textlink:3827370736 --> </p>