2017-11-23 16 views
2

Ich frage mich, ob das Aufrufen des pop()-Verfahrens aus der Stack Datenstruktur innerhalb einer if-Anweisung das erste Element aus dem Stack herausspringt? Hierstack.pop() innerhalb der if-Anweisung

ist ein Beispiel für den Code ein:

public void pop() { 
    if(stack.pop() == min) min=stack.pop(); 
} 

Wird diese Arbeit? Oder ist es besser, es so zu deklarieren:

public void pop() { 
    int poppedOff = stack.pop(); 
    if(poppedOff == min) min=stack.pop(); 
} 

Ich gehe davon aus, dass diese die gleichen Dinge tun, aber ich bin mir nicht ganz sicher.

+1

Wenn Sie nicht beweisen können, dass, wenn 'min' an der Spitze des Stapels steht, *** *** immer ein anderes Element auf dem Stapel sein wird, riskieren Sie eine' EmptyStackException'. –

Antwort

2

Ja. Es wird jeder Aufruf von pop ein Element aus dem Stapel entfernen. Verwenden Sie peek() oder speichern Sie den Wert, wenn Sie pop() aufrufen (wie in Ihrem zweiten Beispiel). Wenn Sie min auf den Wert setzen, der dem Wert entspricht, ist dies sinnlos.

+0

Es wird auf das * next * Element gesetzt. – shmosel