Ausgabe Queue als verkettete Liste

  • Themenstarter Themenstarter GreenThunder
  • Beginndatum Beginndatum
G

GreenThunder

Hallo,

ich komme mal wieder nicht weiter.

Diesmal sollen wir eine Queue erzeugen und diese ausgeben.
Soweit so gut.

Leider bekomme ich das mit der Ausgabe nicht ganz so hin wie ich mir das vorstelle, denn ich gebe immer nur das erste Element aus und lösche es.
Dabei wird zwar meine Queue ausgegeben, doch ist im Endeffekt gelöscht.

PHP:
public String toString()
    {
    String k="";
     while (!this.istLeer())
		{
		k=k + " " + this.vorne.inhalt;
			this.entfernen();
		}
		return k;
    }

Gibt es noch eine andere Möglichkeit die Ausgabe zu realisieren? Vielleicht die Queue in eine temporäre Queue zu kopieren?
 
Hallo!

Also fuer die String representation einer Queue muss man ja nicht unbedingt mit den Queue Methoden arbeiten, sprich du kannst schon "interens" implementierungswissen fuer die Darstellung verwenden.

Java:
/**
 * 
 */
package de.tutorials;

import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

/**
 * @author daritho
 *
 */
public class QueueExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Queue queue = new ArrayBlockingQueue(5);
        queue.add("a");
        queue.add("b");
        queue.add("d");
        queue.add("c");
        queue.add("e");
        
        System.out.println(queue);
    }
}
Hier wird auch implizit ein queue.toString() aufgerufen. Die toString() Methode laeuft hier einfach nur ueber das interne Element Array drueber und gibt die Elemente aus... ohne nun mit den Queue Methoden zu arbeiten...

Gruss Tom
 
Thomas Darimont hat gesagt.:
Hallo!

Also fuer die String representation einer Queue muss man ja nicht unbedingt mit den Queue Methoden arbeiten, sprich du kannst schon "interens" implementierungswissen fuer die Darstellung verwenden.

Java:
/**
 * 
 */
package de.tutorials;

import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

/**
 * @author daritho
 *
 */
public class QueueExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Queue queue = new ArrayBlockingQueue(5);
        queue.add("a");
        queue.add("b");
        queue.add("d");
        queue.add("c");
        queue.add("e");
        
        System.out.println(queue);
    }
}
Hier wird auch implizit ein queue.toString() aufgerufen. Die toString() Methode laeuft hier einfach nur ueber das interne Element Array drueber und gibt die Elemente aus... ohne nun mit den Queue Methoden zu arbeiten...

Gruss Tom


Irgendwie klappt das nicht so recht bei mir. Aber ich glaube auch mein Prof. will, dass wir das anders lösen.

Ich hab mir überlegt, wie ich dass mit einer Hilfsqueue mache. Den Quelltext kann ich nachher mal posten, wenn ich wieder an meinem Rechner sitze.

Trotzdem danke!
 
Hallo!

ich weis ja nicht, wie du deine Queue implementiert hast, aber sollte es eine zirkuläre Queue sein die auf einer verketteten Liste basiert, so könnte man besipielsweise für die Stringrepräsentation beim head starten, die Daten des aktuellen Queue-Nodes ausgeben und von dort aus weiterlaufen bis der Nachfolger des aktuellen Queue-Nodes wieder der head-Node ist:

Java:
        StringBuilder buffer = new StringBuilder();
        queue = head;
        do {
            buffer.append(queue.data).append(" ");
            queue = queue.next;
        } while (queue != head);
        System.out.println(buffer);

Wenn es keine zirkuläre Queue ist, reicht auch ein: } while (queue != null);

Gruss Tom
 
Thomas Darimont hat gesagt.:
Hallo!

ich weis ja nicht, wie du deine Queue implementiert hast, aber sollte es eine zirkuläre Queue sein die auf einer verketteten Liste basiert, so könnte man besipielsweise für die Stringrepräsentation beim head starten, die Daten des aktuellen Queue-Nodes ausgeben und von dort aus weiterlaufen bis der Nachfolger des aktuellen Queue-Nodes wieder der head-Node ist:

Java:
        StringBuilder buffer = new StringBuilder();
        queue = head;
        do {
            buffer.append(queue.data).append(" ");
            queue = queue.next;
        } while (queue != head);
        System.out.println(buffer);

Wenn es keine zirkuläre Queue ist, reicht auch ein: } while (queue != null);

Gruss Tom

Nun, das klingt nach einer professioniellen Lösung, ich bin aber noch beim erlernen von Java ;-]

Folglich hab ich es so gelöst:
PHP:
public String toString()     //Objektmethode toString
    {
    Queue TMP = new Queue();  //neue temporäre Queue erzeugen
    String k="";              //String k mit Leerzeichen
    while (!this.istLeer())   //solange Queue nicht leer ist
      {
      TMP.anhaengen(this.kopf()); //Kopf wird an temporaere Queue gehängt
      k=k + " " + this.kopf();    //String k wird um vorderstes Element erweitert
      this.entfernen();           //vorderstes Element loeschen
      }
    while (!TMP.istLeer())        //solange temporäre Queue nicht leer ist
      {
      this.anhaengen(TMP.kopf()); //Kopf der temporären Queue an Queue anhaengen
      TMP.entfernen();            //Kopf der temporären Queue löschen
      }
    return k;                //String k zurueckgeben
   }

Danke :)
 
Hi,

Bei Antworten die den Absender "Thomas Darimont" tragen kannst Du Dir sicher sein, dass es sich um professionelle Lösungen handelt. :suspekt:

Zumindest kann ich dies IMHO, wie Thomas so schön sagt, berichten.

@Tom: Ist nicht böse gemeint :)

Gruß

Romsl
 
Hallo,

Romsl hat gesagt.:
Hi,

Bei Antworten die den Absender "Thomas Darimont" tragen kannst Du Dir sicher sein, dass es sich um professionelle Lösungen handelt. :suspekt:

Zumindest kann ich dies IMHO, wie Thomas so schön sagt, berichten.

@Tom: Ist nicht böse gemeint :)

Gruß

Romsl
danke für die Blumen :-) ... Gott sei dank muss niemand von euch meinen Python-Code sehen :-(

Gruß Tom
 
Zurück