Schlange Datenstruktur

Status
Nicht offen für weitere Antworten.

bRainLaG

Aktives Mitglied
Hiho ich versuchs mal erneut da ich mein Problem nun scheinbar besser im Griff habe bzw es besser erklären kann.

Zuerst mein Java Code:

Java:
public class Queue {
	
	int i = 0;
	cell next = null;
	String content = "";
	
	class cell {
		
		cell next = null;
		String content = "";

		public cell (String content) {
				this.content = content; 
		}
		public cell getNext(){
			return next;
		}
		public void setNext(cell next){
			this.next = next;
		}
		public String toString() {
			String returnvalue = "";
			returnvalue += content;
			if (this.next != null) {
				returnvalue += next;
			}
			
			return returnvalue;
		}
	}
	
	public void appendElement(cell e){
		while (next != null){
			next.getNext();
		}
			next.setNext(e);
			i = i+1;
	}

	public void insertElement(cell e){
		
	}
}

Implementieren soll ich eine Schlange, bei der ein Element vorne inserted werden kann, am ende angehängt werden kann und gelöscht werden kann.
Was mir noch nicht einleuchtet ist, wie kann ich ohne direkten Pointer in Java den Kopf festlegen, und wie ich nur mit der Next-Refferenz auf das nächste Element die insert und remove Operation geregelt kriege. Wäre für Hilfe echt dankbar, da sich mir das nicht wirklich erschließt.

Um meinen Quelltext zu kommentieren etwas. Ich habe in die innere Klasse cell hereingeschrieben, das jedes Element immer auf das folgende verweisen soll und außerdem das diese "Zellen" strings enthalten.
Des weiteren habe ich i deklariert damit ich mir auch noch die Länge meiner Schlange ausgeben lassen kann. Bei der append Funktion bin ich so vor gegangen das ich gesagt habe solange der next nicht 0 ist, soll er weiterlaufen, wenn dieser 0 ist soll er das Element hinten ran schreiben.
 

faetzminator

Gesperrter Benutzer
Wenn [c]next == null[/c], dann kann man [c]next[/c] auf [c]e[/c] setzen, ansonsten Methode auf [c]next[/c] aufrufen. Btw, Klassen schreibt man CamelCase mit fürendem Grossbuchstaben (Methoden und Variablen (nicht static) mit führendem Kleinbuchstaben).
 

bRainLaG

Aktives Mitglied
aber wenn ich sage das next == 0 sein muss da inserte ich doch nicht weil ich beim inserten davor schreiben muss da muss doch next != 0 sein oder?
 

faetzminator

Gesperrter Benutzer
[c]0[/c] ist nicht [c]null[/c]. Wenn das Objekt null ist, dann hast du das Ende des Schwanzes erreicht... So meine ich es:
Java:
public void insertElement(Cell e){
    if (next == null) {
        next = e;
    } else {
        next.insertElement(e);
    }
}
 

bRainLaG

Aktives Mitglied
mir schon klar aber ich möchte ja mit insert erreichen, dass mein e vor das erste element gesetzt wird und nicht an das letzte gehängt wird.

Das heißt ich müsste vorher den Kopf der Schlange festlegen diesen dann durch e ersetzen und einen neuen Verweis auf das nun zweite vorher erste Element machen.
Nur wie ich das Codetechnisch mache weiß ich eben nicht
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Ist in [c]next[/c] in Queue der erste Eintrag? Wenn ja, wieso heisst dieser nicht [c]first[/c]? Aber grundsätzlich musst du es so machen:
Java:
e.setNext(Queue.this.next);
Queue.this.next = e;
 

bRainLaG

Aktives Mitglied
Naja ich hab es deswegen next genannt, da ich ansonsten in meiner append funktion das next sonst nicht nutzen kann, da ich nicht genau weiß warum er in queue das next aus Cell nicht kennt.

Kannste das was du geschrieben hast ganz kurz kommentieren vieleicht wäre super

*edit*

hab mal bisschen was angepasst noch wäre für feedback sehr dankbar ob das so richtig ist.

in der Klasse Cell hinzugefügt:

Java:
Cell first = null;


		public Cell getFirst(){
			return first;
		}
		public Cell setFirst(Cell first){
			return this.first = first;

in der Queue hinzugefügt:

Java:
	public void insertElement(Cell e){
		while (first != null ){
			e.setNext(Queue.this.first);
			Queue.this.first = e;
		}
			first = e;
	}

hab ich mir so gedacht, das wenn schon ein element enthalten ist, also first != 0 dann mache dieses Element zum Nachfolger, und setzte das erste Element = e also dem einzufügenden ELement.
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
In der ersten Zeile hängst du an das neue (erste) Element das nächste, also das momentan erste. Danach musst du das neue natürlich noch als erstes setzen.
 

bRainLaG

Aktives Mitglied
naja ich hab es jetzt so gemacht, dass ich deine annahme genommen hab, aber nochmal extra für das erste Element eine implementierung vorgenommen habe kann ich das auch so machen?
 

faetzminator

Gesperrter Benutzer
Natürlich kannst du das. Ich würde auf die Schnelle so was erstellen:
Java:
public class Queue<T> {

    private Node first;
    
    public Node getFirst() {
        return first;
    }
    
    public void insert(Node node) {
        node.next = first;
        first = node;
    }
    
    public void append(Node node) {
        if (first == null) {
            first = node;
        } else {
            Node n = first;
            while (n.next != null) {
                n = n.next;
            }
            n.next = node;
        }
    }
    
    public void removeFirst() {
        if (first != null) {
            first = first.next;
        }
    }
    
    public void removeLast() {
        if (first != null) {
            if (first.next == null) {
                first = null;
            }
            Node n = first;
            while (n.next.next != null) {
                n = n.next;
            }
            n.next = null;
        }
    }
    
    public class Node {
        
        private Node next;
        private T data;
        
        public Node(T data) {
            this.data = data;
        }
        
        public T getData() {
            return data;
        }
        
        public Node getNext() {
            return next;
        }
    }
}

Anstatt der Rekursion beim Handling mit dem letzten Element habe ich eine Iteration implementiert. So kriegt man bei grösseren Queues keine SOE's.
 

bRainLaG

Aktives Mitglied
danke dir vielmals ein interesse hab ich allerdings noch.

Wenn ich die Funktionen nun in der Main-Methode aufrufen will wie kann ich das tuen also nehme wir an ich will mit Insert ein Element e1 einsetzen?
 

faetzminator

Gesperrter Benutzer
Du musst natürlich zuerst eine Queue haben.
Java:
Queue<String> queue = new Queue<String>();
queue.insert(e1); // dein e1
queue.insert(queue.new Node("foo")); // sonst noch irgendeine Node

Edit: natürlich funktioniert das mit deiner "cell" genau so, einfach ohne Generics (du erwartest immer String als Content).
 

bRainLaG

Aktives Mitglied
Du musst natürlich zuerst eine Queue haben.
Java:
Queue<String> queue = new Queue<String>();
queue.insert(e1); // dein e1
queue.insert(queue.new Node("foo")); // sonst noch irgendeine Node

Edit: natürlich funktioniert das mit deiner "cell" genau so, einfach ohne Generics (du erwartest immer String als Content).


grml ich hasse fehlende syntax kenntnisse :(

also was beim 2. passiert ist klar einfügen des elements
auch 3. ist mir klar da ich dazu den Knoten noch einfüge
nur die erste Zeile versteh ich nicht wirklich.
 

faetzminator

Gesperrter Benutzer
Es wird eine neue Instanz von Queue erzeugt und in der lokalen Variable queue, welche ebenfalls dort deklariert wird, abgespeichert. Mit den Generics gebe ich an, dass die Daten in einer Node vom Typ String sein müssen (in den Klassen Node und Queue stellvertretend als T).
 

bRainLaG

Aktives Mitglied
Java:
    	Cell e1 = new String("Dies ");

    	Queue<String> queue = new Queue<String>();
    	queue.insertElement(e1);
    	queue.insertElement(queue.new Cell("foo")); // sonst noch irgendeine Node
    }
}

hab bei e1 nun das problem das dies als statisches Element nicht zu einer nicht statischen Klasse Cell zugeordnet werden kann :(
 

faetzminator

Gesperrter Benutzer
Da Cell eine Inner Class von Queue ist, muss auf eine Instanz von Queue eine neue Cell erstellt werden.
Java:
Queue<String> queue = new Queue<String>(); // zuerst die benötigte Queue erstellen
Cell e1 = queue.new Cell("Dies "); // Dann deine Zelle mit dem String "Dies "
queue.insertElement(e1); // hinzufügen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
O Schlange als dynamisches Feld - Aufwand Java Basics - Anfänger-Themen 16
R Liste oder Schlange? Java Basics - Anfänger-Themen 18
S ADT Schlange in Java funktioniert nicht Java Basics - Anfänger-Themen 5
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
O Datenstruktur auf SET prüfen in O(n) Java Basics - Anfänger-Themen 32
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
R Klassen Die lineare Datenstruktur Queue Java Basics - Anfänger-Themen 3
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
C Methoden Datenstruktur Liste Java Basics - Anfänger-Themen 3
S Datentypen nicht lineare STATISCHE Datenstruktur? Java Basics - Anfänger-Themen 10
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Datenstruktur gesucht Java Basics - Anfänger-Themen 3
Luk10 Geeignete Datenstruktur Java Basics - Anfänger-Themen 4
J Erzeugen einer Datenstruktur Java Basics - Anfänger-Themen 12
T Datenstruktur für Sortierung Java Basics - Anfänger-Themen 4
H mehrdimensionale Datenstruktur erfassen Java Basics - Anfänger-Themen 10
StupidAttack Gson, welche Datenstruktur? Java Basics - Anfänger-Themen 4
T Java-Datenstruktur: zuweisen von Strings auf Listen von Strings Java Basics - Anfänger-Themen 10
N Vektor mit eigener Datenstruktur sortieren Java Basics - Anfänger-Themen 20
D Welche Datenstruktur für welche Problemstellung? Java Basics - Anfänger-Themen 10
A begrenzte Datenstruktur zur Speicherung von bytes Java Basics - Anfänger-Themen 6
H Adjazenzliste - Datenstruktur aber wie? Java Basics - Anfänger-Themen 7
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
B Finden gemeinsamer Kanten: welche Datenstruktur ? Java Basics - Anfänger-Themen 9
G Datenstruktur gesucht Java Basics - Anfänger-Themen 14
A Schnelle, dynamische, geordnete Datenstruktur? Java Basics - Anfänger-Themen 11
E Gibt es eine ähnliche Datenstruktur wie eine Hashmap Java Basics - Anfänger-Themen 3
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2
D Was fürne Datenstruktur für Kreuztabelle mit doubles? Java Basics - Anfänger-Themen 1
K Datentyp vs. Datenstruktur - Unterschiede Java Basics - Anfänger-Themen 13
D Was machen wenn Datenstruktur sich ständig ändert? Java Basics - Anfänger-Themen 10
0 Dynamische Datenstruktur ohne Duplikate und mit direkter Elementauswahl Java Basics - Anfänger-Themen 3
G Welche Datenstruktur ( Sets / Maps)? Java Basics - Anfänger-Themen 10
I Datenstruktur eines Terminkalenders Java Basics - Anfänger-Themen 11
K suche nicht dynamisch Datenstruktur Java Basics - Anfänger-Themen 6
M Suche passende Datenstruktur Java Basics - Anfänger-Themen 3
P geeignete Datenstruktur für dreidimensionale Raumbelegung Java Basics - Anfänger-Themen 5
G Suche geeignete Datenstruktur Java Basics - Anfänger-Themen 8
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
U Welche Datenstruktur soll ich nehmen? Java Basics - Anfänger-Themen 11
G Welche Datenstruktur ist hier die sinnvolste Java Basics - Anfänger-Themen 6
G Datenstruktur und die Kommunikation mit der GUI Java Basics - Anfänger-Themen 10
X txt datei in eine datenstruktur einlesen Java Basics - Anfänger-Themen 3
J Datenstruktur Java Basics - Anfänger-Themen 6
G Datenstruktur [int id, int wert] nach wert sortieren? Java Basics - Anfänger-Themen 5
S Welche Datenstruktur für Tabelle/DB? Java Basics - Anfänger-Themen 5
1 Wahl der Datenstruktur für die Suche. Java Basics - Anfänger-Themen 9
G Geeignete Datenstruktur ? Java Basics - Anfänger-Themen 8
N passende Datenstruktur Java Basics - Anfänger-Themen 3
E welche Datenstruktur (Collection) Java Basics - Anfänger-Themen 4
6 Welche Datenstruktur? Java Basics - Anfänger-Themen 3
P Datenstruktur Java Basics - Anfänger-Themen 4
J Kann man Daten innerhalb einer Datenstruktur verändern? Java Basics - Anfänger-Themen 4
K datenstruktur Java Basics - Anfänger-Themen 5
G Datenstruktur abbilden Java Basics - Anfänger-Themen 3
F Welche Datenstruktur für Matrix mit Vektoren? Java Basics - Anfänger-Themen 2
F Gibt es eine Datenstruktur für Koordinaten x, y? Java Basics - Anfänger-Themen 8
E Welche Datenstruktur für Spielbäume? Java Basics - Anfänger-Themen 13
P Datenstruktur gesucht: Array mit Dictionary Java Basics - Anfänger-Themen 2
H Datenstruktur für folgende Daten Java Basics - Anfänger-Themen 8
G Komplexe Datenstruktur (Liste heterogener Datensätze) ? Java Basics - Anfänger-Themen 2
P Welche Datenstruktur um schnell zu suchen? Java Basics - Anfänger-Themen 25
S Datenstruktur für Fahrplan einer Buslinie Java Basics - Anfänger-Themen 7
S Heterogene Datenstruktur Problem mit Set Java Basics - Anfänger-Themen 12
G Datenbank VS simpler Datenstruktur Java Basics - Anfänger-Themen 3
K Welche Datenstruktur für eine Bibliotheksanwendung? Java Basics - Anfänger-Themen 5
G datenstruktur für jTable? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben