Hallo,
ich habe aus einem Buch ein Beispiel, wie man ein Stack programmiert.
Der ursprüngliche (und unvollständige) Code geht so:
Mein Problem liegt darin:
Nun, habe ich geschaut, ob tos wirklich dekrementiert wird und schrieb folgenden Code:
Und tatsächlich wurde das ausgegeben:
mit
wurde doch nur stck dekrementiert und nicht tos!
Man müsste
schreiben, damit auch tos dekrementiert wird (was übrigens zum selben Resultat kommt).
Kann mich bitte jemand aufklären?
Liebe Grüße
Reality
ich habe aus einem Buch ein Beispiel, wie man ein Stack programmiert.
Der ursprüngliche (und unvollständige) Code geht so:
Code:
//Diese Klasse definiert einen Integer-Stack, der 10 Werte aufnehmen kann
public class Stack {
int stck[]= new int[10];
int tos;
//Initialisiere das oberste Element im Stack
Stack()
{
tos =-1;
}
void push(int item)
{
if(tos==9)
System.out.println("Stack ist voll");
else
stck[++tos]= item; //hier kommt das ++ vor der Variable, weil tos vorher inkrementiert werden muss.
}
int pop()
{
if(tos < 0)
{
System.out.println("Stack-Underflow.");
return 0;
}
else
return stck[tos--]; //Hier müsste doch -- auch vor der Variable, weil tos ebenfalls dekrementiert werden muss!
}
public static void main(String[] args) {
}
}
Mein Problem liegt darin:
Code:
else
return stck[tos--]; //Hier müsste doch -- auch vor der Variable, weil tos ebenfalls dekrementiert werden muss!
Nun, habe ich geschaut, ob tos wirklich dekrementiert wird und schrieb folgenden Code:
Code:
//Diese Klasse definiert einen Integer-Stack, der 10 Werte aufnehmen kann
public class Stack {
int stck[]= new int[10];
int tos;
//Initialisiere das oberste Element im Stack
Stack()
{
tos =-1;
}
void push(int item)
{
if(tos==9)
System.out.println("Stack ist voll");
else
stck[++tos]= item;
}
int pop()
{
if(tos < 0)
{
System.out.println("Stack-Underflow.");
return 0;
}
else
return stck[tos--];
}
public static void main(String[] args) {
Stack stck1= new Stack();
for(int i=0;i<10;i++)
{
stck1.push(i);
System.out.println(stck1.stck[i]);
}
stck1.pop();
stck1.pop();
System.out.println(stck1.tos);
}
}
Und tatsächlich wurde das ausgegeben:
0
1
2
3
4
5
6
7
8
9
7
mit
Code:
return stck[tos--];
Man müsste
Code:
return stck[--tos];
Kann mich bitte jemand aufklären?
Liebe Grüße
Reality