Ich habe eine Frage zu einem Programm, das einen Stack anregt (und keine eingebauten Stack-Funktionen oder ähnliches verwendet).
stack2= 1 2 3 4 5 //single dimension array of 5 elements
Durch den Aufruf der Methode pop
sollte der Stapel wie folgt aussehen, wobei jedes Mal, wenn der Stapel erneut aufgerufen wird, ein Element entfernt wird.
stack2= 1 2 3 4 0
stack2= 1 2 3 0 0
stack2= 1 2 0 0 0
stack2= 1 0 0 0 0
stack2= 0 0 0 0 0
Hier ist mein Code:
for (int i = 1; i <= 6; i++)
{
number= TryPop(s2);
//use number
ShowStack(s2, "s2");
}
public void Push(int g)
{
if (top == Max)
{
throw new Exception("Stack overflow...");
}
else
{
tabel[top] = g;
top++;
}
}/*Push*/
Ich habe bereits Code, der mein Array mit Werten füllt (durch eine Push-Methode). Die pop-Methode sollte den letzten Wert nehmen und ihn auf 0 setzen, dann den nächsten Stapel aufrufen und den folgenden auf 0 setzen (wie oben in stack2 gezeigt).
Die aktuelle Pop-Methode, die den oberen Index verfolgt (0 Elemente = 0 oben, 1 Element = 1 oben usw.), enthält bereits eine Unterlaufwarnung, wenn dieser auf 0 oder darunter geht (was korrekt ist).
public int Pop()
{
if(top <= 0)
{
throw new Exception("Stack underflow...");
}
else
{
for (int j = tabel.Length - 1; j >= 0; j--)
{
//...Really not sure what to do here.
}
}
return number;
}/*Pop*/
Da ich in der anderen Klasse bereits eine Schleife habe ( for
Schleife (siehe oben), die den 6-fachen Stapel s2 simuliert. (erster Stapel: 1 2 3 4 0, zweiter Stapel 1 2 3 0 0 und so weiter). Wie genau nehme ich jedes Mal ein Element weg? Entweder habe ich die gesamte Anzeige auf 0 oder die 0 an den falschen Stellen / aus dem Index Fehler.
Edit: Arbeitsmethode Pop:
public int Pop()
{
if(top <= 0)
{
throw new Exception("Stack underflow...");
}
top--;
tabel[top] = 0;
number = tabel[top];
return number;
}/*Pop*/
0 Stimmen
Können Sie uns Ihre Push-Implementierung zeigen? Warum, glauben Sie, brauchen Sie eine Schleife in der Pop-Methode?
0 Stimmen
Wenn Sie top to Pop verwenden, achten Sie auf off-by-one-Fehler, da der Index ein Element hinter dem obersten Element auf dem Stapel liegt.