Programmierung eines Stacks

Zarathustra

Mitglied
Hallo Community,


ich hab eine Aufgabenstellung bekommen, doch ich hab absolut keine Ahnung wie ich anfangen bzw. wie ich das angehen soll und bitte daher um eure Hilfe und um viel Geduld mit einem Anfänger :( ;)
Und zwar muss ich einen Stack programmieren. Die allgemeine Funktionsweise eines Stacks ist mir bekannt.
Die Aufgabe beinhaltet, dass der Stack 6, ich nenne es jetzt mal Elemente da mir kein besseres Wort einfällt, speicher muss und wenn ein weiteres kommt, muss eines raus fallen.
Ich hoffe, ich konnte die Aufgabenstellung gut genug formulieren und bitte nun um eure Hilfe.

Vielen Danke schon mal im Voraus.



LG
 

javampir

Bekanntes Mitglied
hi,
hast du einen anzatz? Du musst doch eine Idee haben?
was für elemente willst du denn speichern?
Tipp: eine feste anzahl an elementen schreit nach einem array.
javampir
 

Zarathustra

Mitglied
Sorry, falls die Frage zu einfach ist bzw. sie sich einfach per Google Suche lösen lässt, aber ich habe schon gesucht und nichts passendes gefunden.... ;(
Oder ich war einfach zu blöd, dass ich die Lösung schon vor mir hatte und ich es nicht gerafft hab...
 

Zarathustra

Mitglied
Hmm. Ich verstehe eigentlich die ganze Aufgabenstellung nicht. Wir sollen einen Stack programmieren, der eine fixe größe hat. Ein Stack zeichnet sich ja dadurch aus, dass er dynamisch ist...
Und wenn ich ein Array nehme, kann ich das LIFO Prinzip nicht anwenden. Lieg ich da richtig?
 

Moro

Mitglied
Hmm. Ich verstehe eigentlich die ganze Aufgabenstellung nicht. Wir sollen einen Stack programmieren, der eine fixe größe hat. Ein Stack zeichnet sich ja dadurch aus, dass er dynamisch ist...
Und wenn ich ein Array nehme, kann ich das LIFO Prinzip nicht anwenden. Lieg ich da richtig?

Also erstmal: Ein Stack ist ein ziemlich allgemeines Konzept einer Datenstruktur. Es ist nicht festgelegt, ob der dynamisch ist oder nicht. Das ist eine Frage der Implementation.

Natürlich kannst du das LIFO-Prinzip mit einem Array anwenden. Musst dir halt in deiner Klasse überlegen, wie du die Kontrolle behaelst. Und dann entsprechend Methoden implementieren wie push(), die alle Werte "schiebt" und vorne dann einen Wert hinzufuegt. Wenn alle Plätze belegt sind, darf vorne nichts mehr hinzugefügt werden.

Was du auch machen kannst, ist eine Datenstruktur "from the scratch" programmieren. Eine Art verkette Liste, wo du eine Klasse Stack hast, die sich merkt wie viele Elemente im Stack liegen und wie viele Elemente maximal im Stack liegen dürfen. Dazu dann eine Klasse Knoten, die genau ein Element des Stacks repräsentiert. Dein instanziertes Stack Objekt verweist dann intern auf den ersten Knoten, und jeder Knoten verweist auf den sich unten liegenden Knoten (oder auf NULL, wenn es das letzte Objekt im Stack ist). Beim entfernen des ersten Knotens per LIFO, musst du dann einfach achten das dein Stack dann statt den ersten Knoten den zweiten mit einer Variable referenziert. Und jeder Knoten refernziert den unter sich liegenden usw.

Keine Ahnung, wie viel Java Erfahrung du hast und woher deine Aufgabe eigentlich kommt. Ggf. könnte das programmieren einer kleinen Datenstruktur schon advanced sein, wenn man die entsprechenden Konzepte nicht kennt. Wobei das eigentlich recht einfach ist. Das Konzept einer verketteten Liste gibt es hier: Javabeginners - Einfach verkettete Liste Das musst du dann nur entsprechend als "Stack" anlegen bzw. konzipieren (was im Prinzip fast genau so funktioniert, nur das deine Funktionen halt darauf achten müssen, dass der Stapel voll sein kann usw.).
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
@Moro: Bei einem Stack mit vorab bekannter maximaler Größe ist eine verkettete Liste "mit Kanonen auf Spatzen schießen". Da ist ein Array viel simpler.
Und man braucht darin auch nix "schiften", sondern kanns einfach von vorn nach hinten (oder umgekehrt) füllen und sich 'nen Index merken, bis wohin es gefüllt ist.

Erst beim "Rausfliegen eines 7. Elements" muss man sich überlegen, wie genau man das machen möchte - ggf. nochmal die Aufgabenstellung genau durchlesen.
 
Zuletzt bearbeitet:

Moro

Mitglied
@Moro: Bei einem Stack mit vorab bekannter maximaler Größe ist eine verkettete Liste "mit Kanonen auf Spatzen schießen". Da ist ein Array viel simpler.

Es kommt halt auf die Aufgabenstelllung an. Ich wollte es als Alternative nennen, da ich ja nicht weiß, ob es in seiner Aufgabe vorgesehen ist zur Realisierung einer Datenstruktur eine andere zu verwenden. Muss er selbst entscheiden.

Und man braucht darin auch nix "schiften", sondern kanns einfach von vorn nach hinten (oder umgekehrt) füllen und sich 'nen Index merken, bis wohin es gefüllt ist.
Erst beim "Rausfliegen eines 7. Elements" muss man sich überlegen, wie genau man das machen möchte - ggf. nochmal die Aufgabenstellung genau durchlesen.

Es kommt sehr darauf an, welche Art Stack er implementiert. Bei LIFO und FIFO geht das noch so ohne Shiften, bei einem Deque, bei dem Elemente sowohl vorn als auch hinten hinzufüget und entnommen werden können, dann nicht mehr - vorausgesetzt der Stack ist nicht dynamisch.

Letztendlich muss der TE selbst entscheiden, wie er vorgeht. Die Tipps hat er ja jetzt alle bekommen. Die genaue Implementation kann er sich selbst überlegen.
 

Zarathustra

Mitglied
Soooooo, ich muss einen Stack mittels Array erstellen.
Diese Funktionen soll das Programm enthalten:
 

Anhänge

  • IntStack.png
    IntStack.png
    89,1 KB · Aufrufe: 68
Zuletzt bearbeitet:

JavaMeister

Gesperrter Benutzer
Ungültige Angabe: Konnte "Eigeninitiative" nicht finden.

Zarathustra, falls es Dir nicht aufgefallen ist, wird hier niemand eine fertige Lösung posten. Wenn du nicht anfägst mehr als "Ich habe keine Ahnung" oder "Hier das ist die Aufgabe" zu posten, dann wird das hier noch ein sehr langer Thread und dein Studium verlängert sich um mehrere Jahrhunderte.
 

minzee

Bekanntes Mitglied
Ich finde es seltsam, dass einerseit im Konstruktor eine Kapazität übergeben werden soll, in push und pop das aber scheinbar ignoriert wird. Ich würde das kontrollieren und ev. eine Exception werfen.
Java:
/**
 * Stack für int-Werte.
 * Maximal size Einträge erlaubt.
 */
class IntStack
{
   private int[] values; // Stack als Array
   private int size;     // Kapazität des Stacks
   private int cnt;      // Anzahl der auf dem Stack befindlichen Elemente
   
   /**
    * @param int size > 0
    */
   public IntStack(int size)
   {
      this.size = size;
      
      // Ein neuer Stack ist leer:
      this.cnt = 0;
      this.values = new int[size]; 
   }
   /**
    * @return int > 0
    */
   public int getSize()
   {
      return this.size;
   }
   /**
    * @return int >= 0
    */
   public int getEleCnt()
   {
      return this.cnt;
   }
   /**
    * @return boolean
    */
   public boolean isFull()
   {
      return this.cnt == this.size;
   }
   /**
    * @return boolean
    */
   public boolean isEmpty()
   {
      return this.cnt == 0;
   }
   /** 
    * @param int val
    * @throws Exception wenn voll
    */
   public void push(int val) throws Exception
   {
      if(isFull())
      {
         throw new Exception("push");
      }
      values[cnt++] = val; 
   }
   /**
    * @return int
    * @throws Exception wenn leer
    */
   public int pop() throws Exception
   {
      if(isEmpty())
      {
         throw new Exception("pop");
      }
      return values[--cnt]; 
   }
   /**
    * @return String
    */
   public String toString()
   {
      if(cnt == 0)
      {
         return "[]";
      }
      
      String s = "[";
      int i = 0;
      while(i < cnt - 1)
      {
         s += values[i++] + ", ";
      }
      return s + values[i] + "]";
   }
}
class Main
{
   public static void main(String[] args) 
   {   
      IntStack is = new IntStack(3);
      try
      {
         is.push(10);
         is.push(20);
         System.out.println(is.getEleCnt());
         System.out.println(is.pop());
         is.push(30);
         System.out.println(is);
      }
      catch(Exception e)
      {
         System.out.println("stack");
      }
   }
}
 

Zarathustra

Mitglied
Danke für die vielen Antworten:

Schlussendlich habe ich es wie folgt versucht:
MainClass:
[Java]
package stack;

public class Main {

public static void main(String[] args) {

Stack myStack = new Stack(6);
System.out.println(myStack.isEmpty());
myStack.push("1");
System.out.println(myStack.pop());
myStack.push("2");
System.out.println(myStack.peek());
myStack.push("3");
System.out.println(myStack.peek());
myStack.push("4");
System.out.println(myStack.peek());
myStack.push("5");
System.out.println(myStack.peek());
myStack.push("6");
System.out.println(myStack.peek());

}
}
[/Java]


StackClass
[Java]
package stack;

public class Stack {

int maxSize;
int top;
String array[];

public Stack(int Size) {

maxSize = Size;
array = new String[maxSize];
top = 0;

}

public boolean isEmpty(){

if(top == 0) {
return true;
}
else {
return false;
}

}

public void push(String str){

if(top < maxSize) {
array[top] = str;
top++;
}
else
System.out.println("Stack Overflow!!");

}
public String pop(){

if(!this.isEmpty()) {
String temp = this.peek();
array[top-1] = null;
top--;
return temp;
}
else {
return null;
}

}

public String peek() {

if(top > 0){
return array[top -1];
}
else {
return null;
}
}
}
[/Java]
 

minzee

Bekanntes Mitglied
Bei einem Stack ist das nicht vorgesehen, dass man mittendrin ein Element rausnehmen oder ersetzen könnte. Dann wäre es kein Stack mehr.
Zet hat gesagt.:
Guten Morgen minzee :),

ich hab' da mal ne' kleine Frage zu deinem Stack.

Ich habe den Stack mit folgendermaßen initialisiert:

Java:
Integer[] stack;

	// IntStack(int size) - Konstrkutor, size = maximale Anzahl an Elementen die
	// auf dem Stack gespeichert werden können
	Stack(int size)
	{
		stack = new Integer[size];
	}

damit ich prüfen kann ob ein Feld NULL ist, beispielsweiße wenn ich ein mittleres Element entferne, und das oberste an diese Stelle setzen möchte o.ä.

Du arbeitest ja mit einem Counter, wie würdest du dann soetwas umsetzen?

Oder ist das in diesem Fall garnicht vorgesehen ? :)
Du scheinst schon deutlich erfahrener zu sein, hättest du lust über meinen "stack"-Code mal drüberzuschauen ?


Grüße
Zet
Dein Posteingang ist voll, darum habe ich es hier reingeschrieben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
S Programmierung eines Geldwechselautomaten! Java Basics - Anfänger-Themen 2
C Problem bei Programmierung eines Taschenrechners Java Basics - Anfänger-Themen 10
G Habe Fragen zu der Programmierung eines Matheprogramms Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
F Automat-Programmierung Java Basics - Anfänger-Themen 30
N Lambdas, Methodenref, fkt Programmierung ? Java Basics - Anfänger-Themen 10
districon Dynamisch Programmierung/Backtracking/Memoization Java Basics - Anfänger-Themen 3
S Buchstaben Programmierung Bedeutung Java Basics - Anfänger-Themen 4
S Hilfe bei Programmierung einer Hotelabrechnung Java Basics - Anfänger-Themen 5
enjoykimii Strukturierte Programmierung Hilfe Java Basics - Anfänger-Themen 29
A Frage zur programmierung Java Basics - Anfänger-Themen 12
Nerdinfekt Programmieranfänger, Schwierigkeiten mit der Programmierung Java Basics - Anfänger-Themen 6
U Compiler-Fehler Programmierung einer Drehkugel Java Basics - Anfänger-Themen 8
L Programmierung mit Hash Java Basics - Anfänger-Themen 3
C Wie habt Ihr angefangen mit der Java Programmierung, ohne Programmiervorkenntnisse Java Basics - Anfänger-Themen 8
S GUI-Programmierung Sudoku-Rätsel lösen Java Basics - Anfänger-Themen 1
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
S Programmierung simulieren - aber wie?! Java Basics - Anfänger-Themen 3
H Java Programmierung Java Basics - Anfänger-Themen 3
W Problem bei Programmierung von Monte-Carlo-Integration Java Basics - Anfänger-Themen 12
D Guten Tag mache gerade eine Umschulung zum FiSi war leider jetzt 2 Wochen Krank und wir hatten Prozendurale Programmierung. Java Basics - Anfänger-Themen 3
P Rechnen mit Brüchen - objektorientierte Programmierung Java Basics - Anfänger-Themen 18
D Objektorientierte Programmierung Java Basics - Anfänger-Themen 13
F Attribute bei Objektorientierter Programmierung Java Basics - Anfänger-Themen 11
F Ich brauche Hilfe bei Objektorientierter Programmierung... Java Basics - Anfänger-Themen 19
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
Q Objektorientierte Programmierung Java Basics - Anfänger-Themen 17
J Texte für Java Programmierung besser verstehen? Java Basics - Anfänger-Themen 2
C GUI Programmierung unter Windows mit Java womit? Java Basics - Anfänger-Themen 11
D Collections Aufgaben Java-Programmierung Überforderung Java Basics - Anfänger-Themen 36
A GUI Programmierung mit Textfield Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
U Brauche Hilfe bei Programmierung einer Produktdatenbank App Java Basics - Anfänger-Themen 4
L Dynamische Programmierung Java Basics - Anfänger-Themen 0
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
A Methoden Habe ein Problem bei folgender Programmierung Java Basics - Anfänger-Themen 15
slejden Erste Schritte Frage zur OOP (objektorientierten Programmierung Java Basics - Anfänger-Themen 4
V Threads Nebenläufige Programmierung Java Basics - Anfänger-Themen 6
V Nebenläufige Programmierung Java Basics - Anfänger-Themen 5
Henri Paare Frage über Java Programmierung Java Basics - Anfänger-Themen 10
R Einige Neulingsfragen (Wrapper, GUI-Programmierung) Java Basics - Anfänger-Themen 4
D JavaBeans und die visuelle Programmierung Java Basics - Anfänger-Themen 2
M Dringend Experten für Scala-Play basierte Programmierung!!!! Java Basics - Anfänger-Themen 0
A Programmierung herangehensweise Java Basics - Anfänger-Themen 9
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
G 3D-Spiele-Programmierung Java Basics - Anfänger-Themen 3
I Programmierung-Hausaufgabe: Hilfe benötigt Java Basics - Anfänger-Themen 8
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
T Nachhilfe JAVA Programmierung Java Basics - Anfänger-Themen 1
R Schaffe es nicht Random-Programmierung zu vollenden. Wo liegt der Fehler in diesem Code? Java Basics - Anfänger-Themen 13
N Socket-Programmierung Java Basics - Anfänger-Themen 4
kaoZ Android Programmierung / Erstellen einer neuen Instanz Java Basics - Anfänger-Themen 2
O OOP Input & Output in der GUI-Programmierung Java Basics - Anfänger-Themen 2
O Java Grafik-Programmierung? Java Basics - Anfänger-Themen 16
F Fehler bei Array und Index Programmierung Java Basics - Anfänger-Themen 18
K Objektorientierten Programmierung Java Basics - Anfänger-Themen 3
R Einstieg in Programmierung Java Basics - Anfänger-Themen 8
W Problem bei MineSweeper Programmierung Java Basics - Anfänger-Themen 10
N Objektorientierte Programmierung: Erben von 2 Klassen - wie ist korrekte Vorgehensweise? Java Basics - Anfänger-Themen 16
D Best Practise für Programmierung Java Basics - Anfänger-Themen 7
D Erste Schritte Einstieg in die Java Spiel Programmierung Java Basics - Anfänger-Themen 7
W objektorientierte Programmierung Java Basics - Anfänger-Themen 25
W objektorientierte Programmierung - String in andere Klasse übergeben Java Basics - Anfänger-Themen 13
E Algorithmen und Programmierung - Datum und Zeit ausgeben? Java Basics - Anfänger-Themen 8
Grejak OOP Einstieg in Objekt-Orientierte-Programmierung Java Basics - Anfänger-Themen 3
D Frage zu Bit Operatoren in der Programmierung Java Basics - Anfänger-Themen 9
U Geräte-Programmierung ? Java Basics - Anfänger-Themen 15
S 2 kurz Fragen zur Möglichkeit der Programmierung Java Basics - Anfänger-Themen 7
T Objektorientierte Programmierung, わからない です Java Basics - Anfänger-Themen 6
J Allgemeine Fragen zur Programmierung Java Basics - Anfänger-Themen 36
N Grafische Programmierung mit jeweils anderen Bildern bei versch. Ergebnissen Java Basics - Anfänger-Themen 9
S Objektorientierte Programmierung Java Basics - Anfänger-Themen 21
M Gui Programmierung Java Basics - Anfänger-Themen 21
J Spielevorschläge für Programmierung Java Basics - Anfänger-Themen 3
O Eisenbahn-Programmierung Java Basics - Anfänger-Themen 8
S Schlechte Programmierung Java Basics - Anfänger-Themen 5
O Probleme bei OO-Programmierung mit Vererbung Java Basics - Anfänger-Themen 18
M Programmierung kürzen??? Java Basics - Anfänger-Themen 5
N Umstieg auf objektorintierte Programmierung Java Basics - Anfänger-Themen 2
N Probleme mit meiner Programmierung Java Basics - Anfänger-Themen 5
M Meine erste Java Programmierung funzt nicht :-( Java Basics - Anfänger-Themen 34
H Programmierung Ampelsteuerung Java Basics - Anfänger-Themen 4
J [Erledigt] Applet Programmierung Java Basics - Anfänger-Themen 4
C Objektorientierte Programmierung Java Basics - Anfänger-Themen 11
T Gui Programmierung lernen Java Basics - Anfänger-Themen 3
E Toolkit (Scanner) Programmierung Java Basics - Anfänger-Themen 5
D Programmierung Profi Java Basics - Anfänger-Themen 18
G Problem bei Programmierung Java Basics - Anfänger-Themen 15
X Objektorientierte Java Programmierung - 3 Fragen zum Code Java Basics - Anfänger-Themen 5
G Problem bei Programmierung Java Basics - Anfänger-Themen 2
G thread programmierung für ANFÄNGER Java Basics - Anfänger-Themen 2
S generic programmierung "ne:w T[X]" Java Basics - Anfänger-Themen 2
A Einstieg in die Programmierung Java Basics - Anfänger-Themen 20
I Frage wegen Wörterbuch Programmierung Java Basics - Anfänger-Themen 13
X Programmierung mit geometrischen Figuren Java Basics - Anfänger-Themen 3
G Opjektorientierte Programmierung (OOP). einfach für euch Java Basics - Anfänger-Themen 4
G Funktions Programmierung Java Basics - Anfänger-Themen 5
W Gui - Grundsätzliche Programmierung Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben