1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Queue mit verketteten Listen

Discussion in 'Programmieren' started by TotalBeginner, Jun 9, 2009.

Thread Status:
Not open for further replies.
  1. Hallo ich bin Anfänger,habe ich einige Schwierigskeiten um Programm zu schreiben,aber ich versuche was zu machen. Ich habe das folgende programm Implementiert
    Das ist IntQueue Klasse, die eine Schlange von int-Zahlen verwaltet
    Sie soll folgende Methoden besitzen:
    // ¨Uberpr¨ufen, ob die Queue leer ist
    public boolean empty()
    // Eintragen in die Queue: Element am Ende einer linearen Liste eintragen
    public void enqueue(int i)
    // Herausnehmen aus der Queue: Erstes Element der linearen Liste zur¨uckliefern
    public int dequeue()

    Zum Testen : einige Zahlen eintragen und wieder entfernen
    Aber das Programm funktionniert nicht kann jemand mir helfen?




    class Element {
    int val;
    Element next;
    Element anfang;
    Element ende;
    }

    public class IntQueue {
    // Referenz auf das erste queueelement
    Element anfang = null;

    // Überprüfen, ob der Queueelement leer ist
    public boolean empty() {
    return anfang == null; }

    // enqueue element hinterfügen
    public void enqueue (int x) {
    if(empty ())// queue von ein element schaffen
    ende= anfang = new Element();
    else
    ende = ende.next = new Element();

    Element n = new Element(); // Erzeuge neues Listenelement
    n.val = x; // Trage Wert x ein
    n.next = ende.next; // Bisherige Stackelemente an neues Element hängen
    ende = n;} // neues Element bildet das Ende



    public int dequeue() {

    int x = anfang.val; // Wert des ersten Elements speichern
    anfang = anfang.next; // oberstes Element entfernen
    return x;} // Wert zurückliefern

    // Hauptprogramm zum Test des Stacks
    public static void main(String[] args) {
    IntQueue q = new IntQueue();
    // Zahlen in die Queue Eintragen
    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);
    q.enqueue(8);
    q.enqueue(9);
    q.enqueue(22);
    q.enqueue(35);



    // Solange noch Zahlen auf die Queue sind
    while (!q.empty()) {
    // ...Erste Element der linearen Liste zrückliefern
    System.out.println(q.dequeue());}}
    }
     
  2. daboom

    daboom Megabyte

    Da ist viel Redundanz drin, aber prinzipiell der richtige Ansatz. (Ich brauchte nen kurzen Moment, um zu sehen, dass das Java ist ;))

    1. Dein Queue Element braucht "anfang" und "ende" nicht, das sollte nur die Queue selbst kennen. "next" und "element" reicht hier ;)

    2. Ich finde in deiner Queue Klasse kein "ende" aber Du greifst darauf zu, vergessen zu posten? (Du solltest Quellcode eh in die dafür vorgesehenen Tags einklammern, wenn Du hier postest)

    3. Versuche mal Deine verketteten Zuweisungen auf mehrere Einzelzuweisungen zu verteilen. Ist übersichtlicher und "deterministischer" ;)

    Am besten den Quellcode nochmal nach diesen Punkten überarbeiten und erneut posten.

    Was kommt denn in der main zum Schluss raus (Wo liegt genau der Fehler)?

    Edit: Du legst in der enqueue Methode zweimal ein neues Elements an? Da hakt mit Sicherheit was...
     
    Last edited: Jun 10, 2009
Thread Status:
Not open for further replies.

Share This Page