Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 29.01.2005, 16:52   Nach oben    #1
Neuer Benutzer
 
Registriert seit: 26.01.2005
Beiträge: 8
Standard Listen

Hallo;
wenn cih zwei listen habe l1 und l2 wie kan ich de denn zusammenfügen; also:
li={2,3,4,5}
l2=[6,7,8,9}
l=[2,6,3,7,4,8,5,9}???
Ich gehe davon aus das ich eine abstrakte klassse list mit den unterklassen cons und nil habe (nil ist die leere liste)
Fienchen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.01.2005, 18:14   Nach oben    #2
Fuzzy
Gast
 
Beiträge: n/a
Standard

wenn man eine solche rekursive Struktur hat, ist eine rekursive Methode empfehlenswert. Ich hoffe, ich habe eine Struktur mit cons und nil im Internet gefunden, die zu dem Problem passt.

Die Funktion basiert auf ganz einfachen Regeln:

Zunächst wird das Ende der Rekursiion abgefragt: Wenn eine der beiden Listen leer ist, ist die andere Liste das Resultat (wenn man später an den Listen herumfuhrwerken will, sollte man nicht die Liste selbst nehmen, sondern eine Kopie der Liste...)

Wenn keine der beiden Listen leer ist, wird von jeder Liste der Kopf entfernt, die beiden Tails miteinander gemergt und anschließend die beiden Köpfe vorne dran gefügt.

Java Code:
  1. //Funktionale Listen mit Cons und Nil
  2.  
  3. public class ListAdder {
  4.     public static void main(String[] args) {
  5.         // Die Listen sind rückwärts eingetragem weil in add ein Fehler vorliegt...
  6.         List l1 = List.nil.add(new Integer[] {5, 4, 3, 2});
  7.         List l2 = List.nil.add(new Integer[] {9, 8, 7, 6});
  8.         List l = merge(l1, l2);
  9.     }
  10.    
  11.     public static List merge(List l1, List l2)
  12.     {
  13.         if (l1.isNil())
  14.             return l2;
  15.         if (l2.isNil())
  16.             return l1;
  17.         return List.cons(l1.hd(), List.cons(l2.hd(), merge(l1.tl(), l2.tl())));
  18.     }
  19. }
  20. /**
  21. * Dies ist eine Implementierung von funktionalen Listen mit einer Konstanten
  22. * nil, die die leere Liste repräsentiert und einer Klassenmethode cons(hd,tl)
  23. * für die Cons-Operation. Jedesmal, wenn eine Element zu einer Liste
  24. * hinzugefügt wird, wird ein neue Liste erzeugt anstatt die alte Liste zu
  25. * verändern.
  26. *
  27. * @author Hubert Baumeister
  28. */
  29. abstract class List {
  30.  
  31.     // Die Klassenvariable nil enthält die leere Liste
  32.  
  33.     /**
  34.      * Die Konstante nil repräsentiert die leere Liste.
  35.      */
  36.     public static final List nil = new Nil();
  37.  
  38.     // Klassenmethode um eine Liste zu erzeugen:
  39.  
  40.     /**
  41.      * Diese Operation erzeugt eine neue Liste mit hd als Kopf und tl als Rest.
  42.      */
  43.     public static List cons(Object hd, List tl) {
  44.         return new Cons(hd, tl);
  45.     }
  46.  
  47.     // Listen werden mit List.nil und l.add konstruiert.
  48.  
  49.     List() {
  50.     };
  51.  
  52.     // Instanzmethoden:
  53.  
  54.     /**
  55.      * Gibt den Kopf von this zurück. Es wird eine EmptyListException erzeugt,
  56.      * falls this keine Elemente enthält.
  57.      */
  58.     public abstract Object hd();
  59.  
  60.     /**
  61.      * Gibt this ohne den Kopf zurück. Es wird eine EmptyListException erzeugt,
  62.      * falls this keine Elemente enthält.
  63.      */
  64.     public abstract List tl();
  65.  
  66.     /**
  67.      * Fügt die Liste l an this an.
  68.      */
  69.     public abstract List append(List l);
  70.  
  71.     /**
  72.      * Liefert true, wenn this die leere Liste ist, false sonst.
  73.      */
  74.     public boolean isNil() {
  75.         return false;
  76.     }
  77.  
  78.     /**
  79.      * Es wird eine neue Liste erzeugt mit Kopf hd und this als dem Rest.
  80.      */
  81.     public List add(Object o) {
  82.         return new Cons(o, this);
  83.     }
  84.  
  85.     /**
  86.      * Diese Operation fügt alle Elemente des Arrays der Reihe nach zu this
  87.      * hinzu.
  88.      */
  89.     public List add(Object[] oa) {
  90.         List l = this;
  91.         for (int i = 0; i < oa.length; i++)
  92.             l = l.add(oa[i]);
  93.         return l;
  94.     }
  95. }
  96.  
  97. class Nil extends List {
  98.  
  99.     // Instanzmethoden
  100.  
  101.     public Object hd() {
  102.         throw new EmptyListException();
  103.     }
  104.  
  105.     public List tl() {
  106.         throw new EmptyListException();
  107.     }
  108.  
  109.     public boolean isNil() {
  110.         return true;
  111.     }
  112.  
  113.     public List append(List l) {
  114.         return l;
  115.     }
  116.    
  117.     public String toString() {
  118.         return "<nil>";
  119.     }
  120. }
  121.  
  122. class Cons extends List {
  123.  
  124.     // Instanzvariablen
  125.  
  126.     Object hd;
  127.  
  128.     List tl;
  129.  
  130.     // Konstruktor
  131.  
  132.     Cons(Object h, List t) {
  133.         hd = h;
  134.         tl = t;
  135.     }
  136.  
  137.     // Instanzmethoden
  138.  
  139.     public Object hd() {
  140.         return hd;
  141.     }
  142.  
  143.     public List tl() {
  144.         return tl;
  145.     }
  146.  
  147.     public List append(List l) {
  148.         return new Cons(hd, tl.append(l));
  149.     }
  150.    
  151.     public String toString() {
  152.         return "" + this.hd + " " + this.tl;
  153.     }
  154.    
  155. }
  156.  
  157. class EmptyListException extends RuntimeException {
  158.     EmptyListException() {
  159.         super();
  160.     }
  161. }

Die Klassen mit Ausnahme der Klasse ListAdder und EmptyListException stammen von der Webseite http://www.mpi-sb.mpg.de/~hubert/PS9...list/List.java. Die toString Methoden habe ich selbst hinzugefügt.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen 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

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

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zugriff auf COM schnittstelle Buhmann PHP-Programmierung 42 21.09.2007 13:22
Freie JavaScript-Bäume für Listen robo47 Gesuche 2 13.07.2007 12:25
font-size verschachtelter Listen ex³ HTML, XML und CSS 6 09.03.2007 14:40
Listen item mit einem Integer aufrufen Xean Allgemeine Java-Programmierung 6 17.03.2006 21:31
scrollen von 2 Listen?!!! grazy Desktop-Applikationen und Grafik 3 18.11.2005 13:33


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:40 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

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