• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Stack bilden, push und pop

E

E27T

Aktives Mitglied
Hallo zusammen. Ich soll einen Stack (Stapel) mit den Methoden push und pop implementieren.
Die Elemente des Stapels sind Objekte vom Typ Node:
static class Node
{
int data;
Node next;
}
Die Instanzvariable top der Klasse Stack ist vom Typ Node und zeigt auf
das oberste Element im Stapel. Um die Klasse zu testen, soll ich einen
Stapel mit den Werten 1 bis 30 mittels einer Schleife erzeugen und den dann ausgeben.

Java:
public class Stack {
    
    
    //Attribut, oberstes Element
    Node top;
    
    
    Stack() {}
    
    public void push() {
        
        for (int i = 1; i <= 30; ++i)
        {
            Node n = new Node();
            top = n;
            n.data = i;
            n.next = n;
        }
    }
    
    public void pop() {
    }
    
    
    
    
    public static void main(String[] args) {

        Stack s1 = new Stack();
        s1.push();
    }

    static class Node {
        
        
        Node() {}
        
        //Attribute
        Node next;
        int data;
    }
}

Die innere Klasse habe ich implementiert, doch weiß nicht wie ich weiter vorgehen soll..Wie kriege ich es hin, den Stapel zu bilden?
 
E

E27T

Aktives Mitglied
Ne bestimmt nicht.. Habe da einfach bisschen rumgespielt...Wie gehe ich die Aufgabe an?
Zuerst wird ja eine neue Instanz n erzeugt.
Dann sage ich, dass das neu erzeugt Element n, top ist.
Als nächstes muss ich den Inhalt von n mit dem Wert i befüllen.

Und wie sage ich jetzt, dass das nächste Element, dass Element des nächsten Schleifendurchgangs sein soll?
 
kneitzel

kneitzel

Top Contributor
Also auch vom Verständnis her: Du sollst einen Stack implementieren und dann den Stack testen. Daher ist so eine Methode:
Java:
    public void push() {
        
        for (int i = 1; i <= 30; ++i)
        {
            Node n = new Node();
            top = n;
            n.data = i;
            n.next = n;
        }
    }

auch vom generellen Ansatz her falsch.

push bekommt ein Element das dann eingefügt wird. Und das testest Du dann in einem Testprogramm mit 30 Werten, die in einer Schleife eingefügt werden ...

Und ich rate Dir auch, Dir das einmal aufzuzeichnen um dann zu schauen, was Du wie umsetzen musst... Die Reihenfolge ist halt mit entscheidend sonst überschreibst Du Dir eine Referenz, die Du später noch brauchst ...
 
E

E27T

Aktives Mitglied
Java:
    public void push() {
        
        for (int i = 1; i <= 30; ++i)
        {   
            Node n = new Node();//Element erzeugen
            top = n;
            n.data = i;    //Element erhält data i
            n.next = top;
            System.out.print(n +  "+" + "");
        }
    }

Das hier wäre meine Optimierung...Wie gebe ich das Objekt als String aus?
 
Thallius

Thallius

Top Contributor
Leider immer noch nicht besser. Geh es doch mal schreit für schritt durch.

Du erzeugst eine Node.
Dann setzt du top auf diese Node
dann weißt du der neuen Node Daten zu
und dann setzt du den next von der neuen node auf top. Was ist denn top in dem Moment? Siehe Zeile 2 -> top ist die neue Node. Somit zeigt next von der neuen node auf sich selber und du hast eine endlosliste mit einem element...
 
kneitzel

kneitzel

Top Contributor
Ich wiederhole noch einmal - das ist nicht die Anforderung! Und das Einfügen ist immer noch falsch! Spiele es einfach einmal durch!
 
E

E27T

Aktives Mitglied
und dann setzt du den next von der neuen node auf top. Was ist denn top in dem Moment? Siehe Zeile 2 -> top ist die neue Node. Somit zeigt next von der neuen node auf sich selber und du hast eine endlosliste mit einem element...
Dann müsste ich sagen, dass mein n.next = das Node n aus dem nächsten Schleifendurchlauf ist, oder nicht.
 
kneitzel

kneitzel

Top Contributor
Hast Du es Dir denn einmal aufgezeichnet? Wenn man es sich grafisch aufmalt, dann ist das deutlich einfacher zu verstehen!

Und generell kannst Du davon ausgehen, dass ich mir schon etwas bei meinen Worten gedacht habe. Das "Die Reihenfolge ist halt mit entscheidend sonst überschreibst Du Dir eine Referenz, die Du später noch brauchst ..." habe ich nicht ohne Grund geschrieben.
 
E

E27T

Aktives Mitglied
Ich bin mir sicher, dass du dir etwas dabei denkst, doch für euch ist es natürlich alles eingängiger. Ihr seht auf den ersten Blick sofort um was es geht.

Ja ich habe es mir aufgezeichnet und meine Idee wäre, den Verweis auf next vorher zu setzen.. also
for (int i = 1; i <= 5; ++i)
{
Node n = new Node(); //Element erzeugen
n.data = i; //Element erhält data i
n.next = top;
top = n;
}
 
Thallius

Thallius

Top Contributor
Das sieht schon besser aus. Jetzt nimmst du noch die for schleife aus der push() Methode raus und setzt sie ins main und rufst dann 30x push auf...
 
E

E27T

Aktives Mitglied
wie kann ich mein Object in String umwandeln?
1616758313178.png
 
E

E27T

Aktives Mitglied
Ich würde das neu erlangte Wissen gerne in die nächste Aufgabe überführen wo es auch um Listen geht. In der Methode setData() soll ein Element überschrieben werden. Ich habe mal bisschen rumprobiert.
Der Ansatz ist doch soweit richtig, oder?
Ich muss ja einmal ein neues Element e erstellen und dass muss sich ja quasi durch die Liste bewegen können. Auch hier hatte ich die Schwierigkeit, zu verstehen, was das nächste Element von e ist.

Muss ich in diesem Fall nicht aber zwingend sagen, dass e mein top ist?
Java:
public class MyList
{
    Element top;
    Element last;
    
    public MyList()
    {
        this.top = null;
        this.last = null;
    }
    
    public void add(String x)
    {
        Element e =  new Element(x);
        
        if (top == null)
        {
            top = e;
            last = e;
        } else {
            last.next=e;
            last = e;
        }
        
    }
    
    public void insertTop(String x)
    {
        Element e =  new Element(x);   
        
        if (top == null)
        {
            top = e;
            last = e;
        }
        else
        {
            e.next = top;
            top = e;
        }
        
        
        
        
        
        /*
         * Hier soll ein neues Element am Kopf
         * der Liste eingefügt werden. Dabei berücksichtigen,
         * dass der Kopf (top) auf das neue Element und das
         * neue Element auf den alten Kopf zeigen muss.
         */

        
    }
    
    public void appendList(MyList l2)
    {   
            last.next = l2.top;            //Letztes Element der alten Liste mit ersten Element der neuen Liste verbinden
            last = l2.last;        //Verbindung zum letzten Element der neuen Liste machen
        
        /*
         * Hier wird eine zweite Liste übergeben wobei
         * das letzte Element der aktuellen Liste
         * auf den Kopf der übergebenen Liste zeigt, und
         * sich das letzte Element (last) ebenfalls ändert.
         */
    }
    
    public void setData(String x, int index)
    
    {
        Element e =  new Element(x);    //Neues Element erzeugen
        
        for (int i = 0; i <= 4; ++i)    //Hochzählen
        {
            top = e;
            
            
            if (i == index)
            {
                e.data = x;
                return;
            }
            e.next = top;
            
        }
        return;
        
        /*
         * Das Element an der Stelle index (beginnend
         * mit 0 für das erste Element) soll ein neues
         * Datum erhalten.
         * Falls das Ende der Liste vorzeitig erreicht wurde,
         * wird die Ausführung mit einem return unterbrochen.
         */
        

    }
    
    
    
    
    public String toString()
    {
        if (top == null)
            return "";
        
        String erg = "";
        Element cur = top;
        while (cur != null)
        {
            erg += cur.toString();
            cur = cur.next;
        }
        
        return erg;
    }
    
    
    public static void main(String[] args)
    {
        MyList l = new MyList();
        l.add("b");
        l.add("c");
        l.add("d");
        l.add("e");
        
        
        System.out.println(l); //Gibt "bcd" zurück
        
        l.insertTop("a");
        System.out.println(l); // Gibt "abcd" zurück
        
        
        MyList newlist = new MyList();
        newlist.add("1");
        newlist.add("2");
        newlist.add("3");
        newlist.add("4");
        
        l.appendList(newlist);
        System.out.println(l); // Gibt "abcd123" zurück
        
        
        l.setData("x", 1);
        System.out.println(l); // Gibt "axcd123" zurück
        
        l.setData("x", 2);
        System.out.println(l); // Gibt "axxd123" zurück
        
    }
}


class Element
{
    Element next;
    String data=null;
    
    public Element(String x)
    {
        this.data=x;
    }
    
    public String toString()
    {
        return (data!=null) ? data : "";
    }
    
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Stack und Heap Speicher Java Basics - Anfänger-Themen 1
G Stack und Queue Arbeitsblatt Java Basics - Anfänger-Themen 3
G Stack programmieren Java Basics - Anfänger-Themen 6
Z Datentypen Stack based calculator Java Basics - Anfänger-Themen 8
F speicherort stack oder heap Java Basics - Anfänger-Themen 1
S Rekursiven Stack Java Basics - Anfänger-Themen 6
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
D Queue vs. Stack Java Basics - Anfänger-Themen 6
P Stack, Heap Java Basics - Anfänger-Themen 13
D Erste Schritte Stack im Rollenspiel Java Basics - Anfänger-Themen 76
J Stack mit Benutzereingabe Java Basics - Anfänger-Themen 17
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
S Sequenz von Zahlen bei einem Stack möglich oder nicht möglich? Java Basics - Anfänger-Themen 5
E Stack vs Queue - Gemeinsamkeiten / Unterschiede Java Basics - Anfänger-Themen 4
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
4 Stack over flow bei rekursiver Tiefensuche Java Basics - Anfänger-Themen 5
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
A Stack programmieren -> Unklarheiten Java Basics - Anfänger-Themen 1
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
L Mit rekursiven Aufrufen einen Stack emulieren Java Basics - Anfänger-Themen 1
T Frage zu Java Stack Java Basics - Anfänger-Themen 5
D Stack-Objekt - LIFO - wait(); notify(); Java Basics - Anfänger-Themen 0
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
M Frage zu Stack und Heap Java Basics - Anfänger-Themen 1
Farbenfroh Suche Übungsaufgaben: BinaryTree, Stack Java Basics - Anfänger-Themen 0
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
X Stack mit Oberklasse, wieso funktioniert es nicht? Java Basics - Anfänger-Themen 8
B Stack/Heap Frage Java Basics - Anfänger-Themen 36
K Probleme mit stack Java Basics - Anfänger-Themen 7
K Wofür wird heute noch die Stack Klasse in Java genutzt Java Basics - Anfänger-Themen 4
F Rekursion Tiefensuch-Problem - Stack Overflow Java Basics - Anfänger-Themen 9
P LinkedList - Stack ... grundlegende Frage Java Basics - Anfänger-Themen 5
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
J OOP Warum braucht man den Stack Java Basics - Anfänger-Themen 3
B Queue mit Daten aus einem Stack füllen Java Basics - Anfänger-Themen 21
G Stack invertieren Java Basics - Anfänger-Themen 3
H Pseudo-Stack (char[] stackArray) mit Zeichen aus einer .txt-Datei befüllen Java Basics - Anfänger-Themen 5
S Stack Problem mit Objekt Java Basics - Anfänger-Themen 2
X String mit String von Objekt im Stack vergleichen? Java Basics - Anfänger-Themen 14
D Stack auslesen mit pop Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
S Stack: Klasseninvariante Java Basics - Anfänger-Themen 4
L OOP Wrapper Klassen - Stack-Aufgabe Java Basics - Anfänger-Themen 2
M Frage zu Stack Java Basics - Anfänger-Themen 3
D Problem mit Set, Stack und Random Java Basics - Anfänger-Themen 2
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
T Probleme bei einen Stack der über drei Dateien funktionieren soll Java Basics - Anfänger-Themen 5
V java.util.Stack Java Basics - Anfänger-Themen 9
K Stack und immer gleiches Objekt Java Basics - Anfänger-Themen 11
kulturfenster Stack / Queue Implementationen Java Basics - Anfänger-Themen 11
S Stack einlesen. Java Basics - Anfänger-Themen 2
E Stack kann nicht implimentiert werden Java Basics - Anfänger-Themen 11
E Eigene Stack Klasse schreiben Java Basics - Anfänger-Themen 12
J Stack Java Basics - Anfänger-Themen 3
K min-int-Wert in'nem Stack Java Basics - Anfänger-Themen 8
L Stack UpnRechner Java Basics - Anfänger-Themen 4
B Stack mit Bildern füllen Java Basics - Anfänger-Themen 2
B Stack mit Strings in zufälliger Reihenfolge füllen Java Basics - Anfänger-Themen 4
J Stack, der Integer-Zahlen enthält Java Basics - Anfänger-Themen 3
K Array Stack Java Basics - Anfänger-Themen 6
O Stack-Klasse Java Basics - Anfänger-Themen 7
S Stack mit Arrays Java Basics - Anfänger-Themen 3
T generischer stack Java Basics - Anfänger-Themen 3
Z Keller/Stack Problem Java Basics - Anfänger-Themen 11
H Stack und Queue Java Basics - Anfänger-Themen 6
M Stack SetValTop Java Basics - Anfänger-Themen 6
G Die Klasse Stack selber schreiben. Java Basics - Anfänger-Themen 2
F Klammertest mit Stack implementieren Java Basics - Anfänger-Themen 5
X Stack Java Basics - Anfänger-Themen 14
J Morgen Java-Klausur. Stack, Heap, Method-Area Java Basics - Anfänger-Themen 2
H Unterschied zwischen Stack und Array Java Basics - Anfänger-Themen 3
F MergeSort iterativ mit Hilfe von Stack Java Basics - Anfänger-Themen 5
S stack Java Basics - Anfänger-Themen 3
S Stack invertieren Java Basics - Anfänger-Themen 14
S Stack-Operationen Java Basics - Anfänger-Themen 59
S Stack.pop() wie genau funktioniert das? Java Basics - Anfänger-Themen 3
A Stack, Frage zur Methode push Java Basics - Anfänger-Themen 4
C Anzahl der Elemente auf einem Stack Java Basics - Anfänger-Themen 4
D Stack chaos Java Basics - Anfänger-Themen 2
megachucky kleines problem mit nem STACK Java Basics - Anfänger-Themen 8
I Stack ist auf einmal empty Java Basics - Anfänger-Themen 3
R Beispiele für Stack & Visualisierung Java Basics - Anfänger-Themen 2
R Stack: Wieso funktioiert das? Java Basics - Anfänger-Themen 2
B eine kleine leichte aufgabe mit einem stack programmieren Java Basics - Anfänger-Themen 2
N Stack-Probleme Java Basics - Anfänger-Themen 2
K Stack Overflow Java Basics - Anfänger-Themen 2
N Weinachtsbaum bilden Java Basics - Anfänger-Themen 15
R Werte aus Array addieren und Mittelwert bilden Java Basics - Anfänger-Themen 2
J Java Datum- Zeit Differenz bilden! Java Basics - Anfänger-Themen 4
E Klickbaren URL bilden Java Basics - Anfänger-Themen 5
S Vererbung Array aus Basisklasse bilden? Java Basics - Anfänger-Themen 5
G Summen addieren und Durchschnitt bilden Java Basics - Anfänger-Themen 4
P Fakultät aus Zahl bilden Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben