Erstellen eines Stacks

Mika34

Bekanntes Mitglied
Hallo liebe Community,
Ich melde mich, weil ich gerade komplett nicht weiterkomme.
Mein Problem bezieht sich auf die Erstellung eines Stacks ohne die Importierung aus der Java-Bibliothek. Bei einem Stack kann man im Grunde sich nur auf das zuletzt hinzugefügte Element beziehen.
Nun kommt mein Problem: Ich möchte einen Stack als Speicher nutzen. Hierbei habe ich an eine einfach verkettete Liste gedacht, welche ich als eine Klasse darstellen möchte. Zusätzlich möchte ich alle Funktionen, sprich pop, push, usw. in einer anderen Methode unterbringen.
->Jedoch scheitert es bei mir an der grundlegenden Erstellung eines Stacks mittels einer Liste.
Ich wäre überglücklich, wenn sich jemand finden würde, der mir helfen könnte....

LG
 

Mika34

Bekanntes Mitglied
Ich bin mir total unsicher, ob dieser Aufbau einer Liste richtig ist.
Deswegen wollte ich nachfragen, ob dieser Aufbau einer Liste richtig ist, um diesen später als einen Stack mit den dazugehörigen Operationen zu verwenden.


Code:
class NumberList {
    
    private class ListCell {
        private int number;
        ListCell next;
        
         ListCell(int number, ListCell next) {
            this.number = number;
            this.next=next;
        }
    }
    
    private ListCell head;
    public NumberList() {
        this.head = null; //Leere Liste
    }
}
 

httpdigest

Top Contributor
Ja, genauso würde ich das auch machen. Wenn du in deinem Stack also nur int's speichern möchtest.
Und "NumberList" würde ich vielleicht einfach zu "Stack" oder "IntStack" umbenennen. Es ist ja ein Implementierungsdetail, dass der Stack intern mit einer einfach verketteten Liste implementiert ist.
Und den Konstruktor kannst du dir sparen. Instanzvariablen werden immer mit ihrem default-Wert initialisiert; bei Referenztypen = null.
 

Mika34

Bekanntes Mitglied
Ja, genauso würde ich das auch machen. Wenn du in deinem Stack also nur int's speichern möchtest.
Und "NumberList" würde ich vielleicht einfach zu "Stack" oder "IntStack" umbenennen. Es ist ja ein Implementierungsdetail, dass der Stack intern mit einer einfach verketteten Liste implementiert ist.
Und den Konstruktor kannst du dir sparen. Instanzvariablen werden immer mit ihrem default-Wert initialisiert; bei Referenztypen = null.
Vielen Dank httpdigest! :)
Wenn ich nun Methoden für den Stack schreibe, also beispielsweise (addiere die obersten zwei Elemente des Stacks oder multipliziere diese), dann sollte ich dies in einer anderen Klasse machen, oder?
Oder könnte ich nun darunter diese Funktionen hinschreiben? Ein Beispiel wäre, wenn ich
Java:
class NumberList {
    
    private class ListCell {
        private int number;
        ListCell next;
        
         ListCell(int number, ListCell next) {
            this.number = number;
            this.next=next;
        }
    }
    
    private ListCell head;
    public NumberList() {
        this.head = null; //Leere Liste
    }
    
    
    
    
    public void push(int number) {
        //addieren zu einer leeren Liste
        if(this.head == null) {
            this.head = new ListCell(number, null);
            System.out.println("OK"); //Operation hat geklappt
            return;
        }
        ListCell c = this.head;
        while(c.next != null) {
            c = c.next;
        }
      
        c.next = new ListCell(number, null); /*Jetzt ust c.next gleich
        null und man kann eine neue Listenzelle hinzufügen.*/
    }
 

httpdigest

Top Contributor
Bei dir ist jetzt "oben" im Stack das letzte Listenelement. Das wäre aber sehr ineffizient, weil ja jede Operation immer auf dem oberen Element arbeitet. Stattdessen definiere den Anfang der Liste als oben. Dann sieht dein push(int) so aus:
Java:
  public void push(int number) {
    head = new ListCell(number, head);
  }
 

Mika34

Bekanntes Mitglied
Dann habe ich das Prinzip glaube ich verstanden. Wenn ich nun die oberste Zahl entfernen will, dann würde ich es ja so machen, oder?
Code:
    public void remove() {
        head = new ListCell(null, null); //edit null, da 0 ungleich null
    }
 
K

kneitzel

Gast
Nein, mal es dir doch mal auf einem Papier auf. Mit deinem aktuellem Code löscht Du alle Elemente und hast dann nur noch eine neues Element mit Wert „0“ in der Liste.
 

Mika34

Bekanntes Mitglied
Nur zum Verständnis meine Implementierung des Stacks mithilfe der verketteten Liste stimmt aber soweit, oder?
Code:
class Stack {
    
    private class ListCell {
        private String number;
        ListCell next;
        
         ListCell(String number, ListCell next) {
            this.number = number;
            this.next=next;
        }
    }
    
    private ListCell head;
    public Stack() {
        this.head = null; //Leere Liste
    }
 

Mika34

Bekanntes Mitglied
Dann hätte ich genau diesen Code.

Code:
    public void pop() {
      if(this.head == null) { //wenn es eine leere Liste ist
          return;//tue nichts, da man nichts entfernen kann
      }
          else {
              head=null; //Wenn Liste nicht leer, dann setze
                         //das erste Stack Element auf null.
          }
    }
 
K

kneitzel

Gast
Du solltest dir das Konzept einer Liste einmal genau aufzeichnen. Was zeigt wohin,

Oder anders:
Du tust die Zahlen 1 und 2 auf den Stack. Dann hast du sowas:
head -> 2 -> 1 -> null
Nun nimmst du die 2 weg und meinst, das Ergebnis soll
head -> null
sein?
 

Mika34

Bekanntes Mitglied
Code:
  So, jetzt wurde es auch getestet. Es klappt :)
 
  public void pop() {
      ListCell c = this.head;
    if(this.head == null) { //wenn es eine leere Liste ist
        System.out.println("EMPTY");               //das erste Stack Element auf null.
        return;
        //tue nichts, da man nichts entfernen kann
    }
    
        else {
          head = head.next;//Wenn Liste nicht leer, dann springe zum Nächsten
            System.out.println(head.getNumber());
        }
  }
 

Mika34

Bekanntes Mitglied
Du solltest dir das Konzept einer Liste einmal genau aufzeichnen. Was zeigt wohin,

Oder anders:
Du tust die Zahlen 1 und 2 auf den Stack. Dann hast du sowas:
head -> 2 -> 1 -> null
Nun nimmst du die 2 weg und meinst, das Ergebnis soll
head -> null
sein?
Also es stimmt doch nun, oder? Also von dem Aufbau ohne den Terminalausgaben
 
K

kneitzel

Gast
Hast du es denn durchgespielt? Deine Implementierung nimmt erst das erste Element raus und gibt dann den Inhalt des nun ersten Elements aus. Wenn es das ist, was du bei Pop erwartest, dann ist es richtig.

Aber Deine Tests waren wohl erfolgreich, denn du schreibst ja, dass es getestet wurde und klappt nach Deiner Aussage. Wenn Du zufrieden bist, dann sind wir auch zufrieden, wobei ich die Anweisungen vertauschen würde. Erst die Ausgabe und dann das Element entfernen....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
C Wie kann ich Versionen eines Projektes in Eclipse erstellen? Java Basics - Anfänger-Themen 3
M Erstellen eines insets Objekts, GridBagLayout Java Basics - Anfänger-Themen 13
C Erstellen eines Widerstandsnetzwerks Java Basics - Anfänger-Themen 10
D java main methode kann nicht kompiliert werden (Erstellen eines Objekts) Java Basics - Anfänger-Themen 6
K Klassen Klasse erstellen, die Punkte eines Koordinatensystems repräsentiert? Java Basics - Anfänger-Themen 3
C Erstellen eines Telefonbuchs Java Basics - Anfänger-Themen 1
K Nullpointer beim Erstellen eines Imageicons Java Basics - Anfänger-Themen 2
R Problem beim erstellen eines neuen Klassenobjekts Java Basics - Anfänger-Themen 2
J Klassen Erstellen eines Attributs mit 3 Möglichkeiten Java Basics - Anfänger-Themen 6
N Probleme mit dem Erstellen eines package Java Basics - Anfänger-Themen 6
W Problem beim erstellen eines Tests Java Basics - Anfänger-Themen 16
S Problem beim Erstellen eines Scanner-Objekts Java Basics - Anfänger-Themen 7
A Null Pointer Exception beim Erstellen eines Arrays aus einer eigenen Klasse Java Basics - Anfänger-Themen 3
R Array eines neuen Typen erstellen und befüllen Java Basics - Anfänger-Themen 2
V Problem beim erstellen eines ausführbaren Programs Java Basics - Anfänger-Themen 5
G Erstellen eines Maven Projektes mit Eclipse Java Basics - Anfänger-Themen 9
C Problem beim erstellen eines jar Archivs Java Basics - Anfänger-Themen 2
K Koordinaten eines 2D-Feldes erstellen Java Basics - Anfänger-Themen 4
T Erstellen eines Steuerprogramms mittels if-anweisungen Java Basics - Anfänger-Themen 10
J erstellen eines 2D-Arrays mit Beschriftung Java Basics - Anfänger-Themen 4
Z prob beim erstellen eines jar files mit eclipse Java Basics - Anfänger-Themen 4
J Probleme beim Erstellen eines Programms Java Basics - Anfänger-Themen 5
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J Packages erstellen Java Basics - Anfänger-Themen 7
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
Ostkreuz Spielfeld Schatz erstellen Java Basics - Anfänger-Themen 5
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
B Klasse statisch erstellen da n-mal geladen Java Basics - Anfänger-Themen 3
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
A Passwort erstellen Java Basics - Anfänger-Themen 3
S CVS erstellen Java Basics - Anfänger-Themen 1
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
dennis_lnz Klassen Wie kann ich mein Java Textadventure verbessern, um ein Klassendiagramm zu erstellen? Java Basics - Anfänger-Themen 9
dcHost Java Kara Sensor erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
N 2D Array Summe erstellen Java Basics - Anfänger-Themen 6
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
S Programm erstellen Java Basics - Anfänger-Themen 3
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
T Countdown erstellen Java Basics - Anfänger-Themen 7
I ZIP File erstellen Java Basics - Anfänger-Themen 10
L Ordner in neuen erstellten Ordner erstellen Java Basics - Anfänger-Themen 12
B Zurück Button erstellen Java Basics - Anfänger-Themen 1
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
B JaxB - Referenzen erstellen? Java Basics - Anfänger-Themen 2
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
E Classpath Datai erstellen Java Basics - Anfänger-Themen 3
B eine methode erstellen Java Basics - Anfänger-Themen 7
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
L FinanzApp erstellen Java Basics - Anfänger-Themen 1
J Junit4 Klasse erstellen Java Basics - Anfänger-Themen 5
B Warteschlange erstellen mit LinkedList ? Java Basics - Anfänger-Themen 6
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
JaVaN0oB Bruchklasse erstellen Java Basics - Anfänger-Themen 9
N Kreismuster auf Bestehendem Kreis erstellen Java Basics - Anfänger-Themen 10
K Rahmen erstellen mit mehrdimensionalem Array Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
K Objektdiagramm erstellen Java Basics - Anfänger-Themen 3
D Klassen Klassendiagramm richtig erstellen Java Basics - Anfänger-Themen 20
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
E Filmsammlung erstellen Java Basics - Anfänger-Themen 6
B Eine Methode erstellen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben