einfach verkettete Listen

Vladyslav

Mitglied
Hi,
wie oben beschrieben habe ich Probleme mit den einfach verketteten Liste, evtl. könnte man mir hier helfen.
Meine Aufgabe ist es aus einer Liste von 49 Zahlen, 6 Zahlen zu ziehen. Jede der 6 zufälligen Zahlen darf nur 1x gezogen werden, da sie aus der Liste ausgekettet werden.

Vom Prinzip her habe ich es verstanden nur die Umsetzung fällt mir schwer.
- Einfach verkette Listen beginnen beim Head und enden bei null.
- Am Anfang verweisst head auf null.
- Um Knoten einzufügen musst man imemr die Liste durchlaufen.
- Um etwas auszuketten, braucht man einen Zwischenspeicher in welchem man den Knoten der nach der zu "löschenden"-Knoten kommt speichert, danach setzt verbindet man das gespeicherte Element mit dem Knoten vor dem "gelöschtem" und dann ist die Liste wieder durchgängig.
- Was löschen muss man in dem Sinne nicht, wenn man etwas auskettet reicht es schon, da der Garbage Collector sich dann darum kümmert.

Soweit so gut.

Habe mal meinen "Fortschritt" soweit ich kamm gepostet.

Beim schreiben sind mir aber Fragen aufgekommen :

Dieser abstrakter Datentyp LottoElement, dem habe ich ein Attribut ""nextListElement"" gegeben. Ein Int nimmt eine Stelle im Speicher ein nur für Zahlen, double auch doch etc.. die primitiven Datentypen nehmen immer ein festen Platz im Speicher ein .
Wie ist es bei abstrakten ? Zwischen primitiven Datentypen kann man ja umwandeln von double zu int etc.. mit (int) . Von dem DatenTyp LottoElement zu int geht ja nicht.

Jetzt wird die Liste mit den 49 Zahlen aus dem Datentyp LottoElement bestehen. Wie finde ich eine spezielle Zahl beim durchlaufen der Liste. Bei Arrays kann ich ja eine for-Schleife schreiben und mit dem int( etc..) Wert suchen ?

Jetzt gibt es zu den Listen immer das anschauliche Beispiel mit den Rechtecken die die Knoten symbolisieren. Einen head start und und null. Die Blöcke dazwischen sind die Knoten. Rechtecke in der Mitte geteilt. Die linke Seite verweisst auf seinen eigenen Knoten, die rechte auf die nächsten ggf. null.
Was ich nicht verstehe, wenn head und null immer außen vor sind. Fängt dann meine Liste statt mit 1,2,3 ; mit null,1,2 an? Oder verweißt die 1 auf head ?

--

Mein Ansatz wäre

Ich fühle mir gerade wie in dem Moment als Algebra drankamm und plötzlich Zahlen durch Buchstaben ersetzt worden sind. >.<


hilfreiche Antworten wären wirklich sehr nett, mir qualmt die Rübe.

mfG








Code:
public class LottoElement {

    int zahl;
    LottoElement nextListElement;

    public LottoElement(int zahl) {
        nextListElement = null;
        this.zahl = zahl;
    }

//    public void setNextListElement(LottoElement nextListElement) {
//        this.nextListElement = nextListElement;
//    }

    public void setZahl(int zahl) {
        this.zahl = zahl;
    }

//    public LottoElement getNextListElement() {
//        return nextListElement;
//    }

    public int getZahl() {
        return zahl;
    }

}
public class LottoList {
    
    private LottoElement head;
    
    public LottoList() {
        head = null;
    }
    
    public boolean isEmpty() {
        return head == null;
    }
    
    public static void main (String []args) {
        
        LottoList liste = new LottoList();
        
        
        }
    }
 

mihe7

Top Contributor
Dieser abstrakter Datentyp LottoElement, dem habe ich ein Attribut ""nextListElement"" gegeben. Ein Int nimmt eine Stelle im Speicher ein nur für Zahlen, double auch doch etc.. die primitiven Datentypen nehmen immer ein festen Platz im Speicher ein .
Wie ist es bei abstrakten ?
Bei komplexen Datentypen wird einmal Speicher für das Objekt auf dem Heap benötigt. Die Variable nextListElement enthält dagegen nur die Adresse (8 Byte).
 

mihe7

Top Contributor
Oh, da war ja noch mehr :)

Wie finde ich eine spezielle Zahl beim durchlaufen der Liste. Bei Arrays kann ich ja eine for-Schleife schreiben und mit dem int( etc..) Wert suchen ?
Das geht genauso. Das erste Element ist head (Index 0), wenn Du das fünfte Element willst, musst Du vier Elemente weitergehen. Wenn Du eine bestimmte Zahl suchst, kannst Du getZahl() verwenden, um zu vergleichen.

Was ich nicht verstehe, wenn head und null immer außen vor sind. Fängt dann meine Liste statt mit 1,2,3 ; mit null,1,2 an? Oder verweißt die 1 auf head ?
Bei einer einfach verketteten Liste, ist head einfach der Zeiger auf das erste Element, das wäre dann das Element mit der 1.
 
Es ist zwar etwas unschön, aber so hätte ich das gemacht:
Java:
import java.util.Random;

public class Trommel {
	private Random random = new Random();
	private int n = 0;
	private TrommelElement first = null;

	public Trommel(int n) {
		this.n = n;

		TrommelElement e = null;
		for (int i = 1; i <= n; i++) {
			if (i == 1) {
				e = (first = new TrommelElement(i));
			} else {
				TrommelElement e2 = new TrommelElement(i);
				e.setNextListElement(e2);
				e = e2;
			}
		}
	}

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

	public int getNextInt() {
		int i = random.nextInt(n);
		n--;

		if (i == 0) {
			TrommelElement e = first;
			first = e.getNextListElement();
			return e.getZahl();
		}

		TrommelElement e = first;
		for (int j = 1; j < i; j++) {
			e = e.getNextListElement();
		}
		TrommelElement e2 = e.getNextListElement();
		e.setNextListElement(e2.getNextListElement());
		return e2.getZahl();
	}

	public static void main(String[] args) {
		Trommel lotto = new Trommel(5);
		while (!lotto.isEmpty()) {
			System.out.println(lotto.getNextInt());
		}
	}
}

class TrommelElement {
	private int zahl;
	private TrommelElement nextListElement;

	public TrommelElement(int zahl) {
		this(zahl, null);
	}

	public TrommelElement(int zahl, TrommelElement nextListElement) {
		this.zahl = zahl;
		this.nextListElement = nextListElement;
	}

	public int getZahl() {
		return zahl;
	}

	public void setZahl(int zahl) {
		this.zahl = zahl;
	}

	public TrommelElement getNextListElement() {
		return nextListElement;
	}

	public void setNextListElement(TrommelElement nextListElement) {
		this.nextListElement = nextListElement;
	}
}

Cheers!
 

Vladyslav

Mitglied
Danke, hier noch eine Frage, sitzen schon etwas länger an dem Thema und hab jetzt wieder zwei neue Klassen gemacht. Knoten und List um es mir zu vereinfachen. Check nicht genau wie ich die Sachen umsetzen soll.

Hab jetzt den Konstruktor neu
und in der Klasse List habe ich mir eine Methode aus der Vorlesung abgeschaut.

Ich verstehe aber nicht wie next auf etwas zugreifen soll. [ Knoten temp = head; ] das versteh ich.
Bei der while Schleife steht aber [temp = temp.next] ;
mit temp.next nehme ich mir das Attribut temp vom Typ Knoten und benutze den Punktoperator damit temp auf die Adresse zeigt ?
Ich kann mir darunter nichts vorstellen :(.

Bzw. verstehe ich es richtig?
(Bsp: ich habe 4 Zahlen in meiner Liste. )
temp verweisst bei ja auf head, head verweißt auf null. Bildlich gesprochen habe ich damit zwei Zeiger erschaffen. Beide zeigen auf den Block head in dem null steht.
Sagen wir mal ich hab schon eine List. Dann nimmt [temp.next] immer die Adresse und dann den Wert der Zahl in der Liste an. Bin ich gerade zu eingefahren, oder irre ich mich aber die while schleife zählt doch so nicht hoch in der Liste ?



Code:
    public Knoten(int zahl, Knoten next) {
        this.zahl = zahl;
        this.next = next;
    }
    
    
     // Klasse List :
private Knoten head = null;

    public List() {
        head = new Knoten();
    }


public void add(Knoten n) { //fügt  n hinten an
        Knoten temp = head; //Zeiger für temp verweisst auf head 
        while (temp.getNext() != null)
        {
            temp = temp.next;
        }
        temp.next = n;
    }
 
Guck doch einfach, was ich gemacht habe. Ich hab zwar keine add Methode eingeführt, es sollte aber dennoch ersichtlich sein, wofür temp, temp.next usw. wichtig sind (zumal du auch noch kommentierten Code hast....).
 

Vladyslav

Mitglied
Ich weiß nicht ob es abwertend gemeint ist oder nicht, das kommentierte hab ich dazugefügt ums besser zu vestehen, weiß nicht was daran falsch ist. :)
 

mihe7

Top Contributor
Ich verstehe aber nicht wie next auf etwas zugreifen soll. [ Knoten temp = head; ] das versteh ich.
Bei der while Schleife steht aber [temp = temp.next] ;
mit temp.next nehme ich mir das Attribut temp vom Typ Knoten und benutze den Punktoperator damit temp auf die Adresse zeigt ?
Ich kann mir darunter nichts vorstellen :(.
Also, temp referenziert ein Objekt vom Typ Knoten. Dieses Objekt enthält ein Attribut next, das seinerseits ein Objekt vom Typ Knoten referenziert (oder null ist).

temp = temp.next nimmt nun die in temp.next gespeicherte Adresse und weist sie der Variablen temp zu. Du hangelst Dich also zum nächsten Objekt.

temp verweisst bei ja auf head, head verweißt auf null. Bildlich gesprochen habe ich damit zwei Zeiger erschaffen. Beide zeigen auf den Block head in dem null steht.
Nein, temp verweist nicht auf head, sondern per temp=head weist Du der Variablen temp den Wert von head zu. Es wird der Wert von head auf temp kopiert. Dabei handelt es sich halt um eine Adresse. Du hast also zwei Zeiger erschaffen, die beide auf null zeigen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
K Einfach Verkettete Liste - addFirst() Java Basics - Anfänger-Themen 7
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
N einfach verkettete liste Java Basics - Anfänger-Themen 3
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4
E einfach verkettete liste, nullPointerException Java Basics - Anfänger-Themen 5
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
N Erste Schritte HelloWorld möchte einfach nicht laufen Java Basics - Anfänger-Themen 11
K Programm stoppt einfach ohne Grund Java Basics - Anfänger-Themen 4
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
S Einfach verkette Liste Java Basics - Anfänger-Themen 27
Hacer Operationen einfach verketteter Listen Java Basics - Anfänger-Themen 22
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
V Codezeile wird einfach nicht ausgeführt Java Basics - Anfänger-Themen 23
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
N Einfacher Rechner (für mich nicht so einfach) Java Basics - Anfänger-Themen 5
M Array in ein Array übertragen (möglichst einfach) Java Basics - Anfänger-Themen 6
T Input/Output Daten/Objekte einfach speichern Java Basics - Anfänger-Themen 5
R Methoden... ich vesteh sie einfach nicht Java Basics - Anfänger-Themen 15
llabusch Verkette Listen - Einfach und Doppelt Java Basics - Anfänger-Themen 3
C Erste Schritte Problem mit der Division von Koeffizienten... oder einfach nur irgendwlechen zahlen Java Basics - Anfänger-Themen 10
D Klassen Klassen, Objekte, Konstruktor - einfach erklärt Java Basics - Anfänger-Themen 12
B Variable wird einfach so wieder auf "null" gesetzt Java Basics - Anfänger-Themen 12
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
S ich begreife es einfach nicht -> zweck der Schnittstellen Java Basics - Anfänger-Themen 27
J Interface Wie funktioniert das mit den Interfaces. Ich verstehe es einfach nicht! :( Java Basics - Anfänger-Themen 15
W Java-Programm als Icon mit Doppelklick einfach öffnen ? Java Basics - Anfänger-Themen 3
M Layout einfach bilden Java Basics - Anfänger-Themen 4
I Weiß einfach nicht mehr weiter... Java Basics - Anfänger-Themen 3
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
A If-Schleife spinnt - ganz einfach Code - Riesen Problem :) Java Basics - Anfänger-Themen 9
Luk10 einfach animation Java Basics - Anfänger-Themen 2
E JMC - Dlls einbinden - möglichst einfach Java Basics - Anfänger-Themen 8
I einfach verkette Liste Java Basics - Anfänger-Themen 9
H Typumwandlung String --> Int (ganz einfach) Java Basics - Anfänger-Themen 9
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
K Ich verstehe switch einfach nicht Java Basics - Anfänger-Themen 4
M jar-Datei einfach umbenennen? Java Basics - Anfänger-Themen 8
S Filewriter schreibt einfach nicht Java Basics - Anfänger-Themen 6
G Opjektorientierte Programmierung (OOP). einfach für euch Java Basics - Anfänger-Themen 4
X WAV conversion ist einfach nicht möglich Java Basics - Anfänger-Themen 2
J jar erstellen. Es klappt einfach nicht Java Basics - Anfänger-Themen 14
L Eingeben Rechnen Ausgeben - Leider nicht so einfach Java Basics - Anfänger-Themen 31
P einfach frage zur vererbung Java Basics - Anfänger-Themen 9
G Frank A. - ports einfach öffnen und schließen Java Basics - Anfänger-Themen 3
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
L while wird einfach übersprungen? Java Basics - Anfänger-Themen 4
D einfach berechnung einer onlinezeit Java Basics - Anfänger-Themen 25
B Thread will einfach nicht stoppen Java Basics - Anfänger-Themen 12
B Packages einfach kopieren? Java Basics - Anfänger-Themen 13
N Mein Applet findet -online- einfach die Klasse nicht ! Java Basics - Anfänger-Themen 6
S Java rundet einfach auf 0 Java Basics - Anfänger-Themen 2
L Ein Bild auf ein JFrame legen. nicht so einfach? =( Java Basics - Anfänger-Themen 11
M Tablelayout einbinden - ich schaff's einfach nicht Java Basics - Anfänger-Themen 16
D Button Text will einfach nicht erscheinen Java Basics - Anfänger-Themen 6
M Methoden. ich versteh das einfach nicht! Bitte helfen! Java Basics - Anfänger-Themen 4
H Kann man in Java einfach einen Beep erzeugen Java Basics - Anfänger-Themen 2
C einfach aber komisch Java Basics - Anfänger-Themen 5
P Restart Button für einfach Applikation Java Basics - Anfänger-Themen 7
H RAF geht einfach nicht Java Basics - Anfänger-Themen 12
D RegEx Probleme - wahrscheinlich zu einfach. Java Basics - Anfänger-Themen 2
H Einfach Datenübergabe Java Basics - Anfänger-Themen 4
S RegEx Syntax - ich verstehe sie einfach nicht! Java Basics - Anfänger-Themen 3
V Teil eines Programms funktioniert einfach nicht Java Basics - Anfänger-Themen 2
V If Schleife wird beim ausführen einfach ignoriert Java Basics - Anfänger-Themen 4
D Einfach Leerzeile einfügen ? Java Basics - Anfänger-Themen 2
G Owner von JDialog;Komme einfach nicht weiter Java Basics - Anfänger-Themen 4
B Applet geht einfach nicht Java Basics - Anfänger-Themen 16
S UIManager kann einfach nicht aufgelöst werden Java Basics - Anfänger-Themen 4
R Einfach if-Abfrage Java Basics - Anfänger-Themen 7
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
A Einfach, gut erklärte Übungen!!! Java Basics - Anfänger-Themen 3
M Verkettete Liste Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
A Verkettete Liste Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben