Informatik: einen Stapel umdrehen?

5 Antworten

public class Main
{
    public static void main(String argv[])
    {
        Stack<Integer> stack1 = new Stack<Integer>();
        Stack<Integer> stack2 = new Stack<Integer>();
        
        //Befüllung mit Beispielzahlen
        for(int i = 0; i < 5; i++)
        {
            stack1.push(i);
        }
        
        //Iterierung durch Stack
        while(!stack1.isEmpty())
        {
            //Oberstes Element wird auf anderen Stapel pepusht
            stack2.push(stack1.top());
            //Oberstes Element wird gepopt
            stack1.pop();
        }
    }
}

Habs nicht ausprobiert aber sollte funktionieren

Dann überleg mal wie man das machen kann. Als Anfänger kann man das auch. Wenn du mehr als zwei Minuten nachgedacht hast geb ich dir ein Tipp.

Du nimmst deinen Stack s1 und einen neuen Stack s2 und überträgst alles via pop von s1 und push nach s2 in s2.


schesslo 
Beitragsersteller
 16.01.2018, 18:57

danke👌

Ein Stack hat das "Last In – First Out" Prinzip, wenn du ihn umdrehen willst um das erste was du in den Stapel gepackt hast wider als ersten rausnehmen zu können, warum nutzt du dann nicht eine Pipe (First In – First Out)?

Ansosten nimm einen 2. Stack und pack jedes Objek rüber in den 2.

Pseudocode:

stack1 ist der Stack den du umdrehen willst
stack2 ist ein temporärer Stack

Solange stack1 nicht leer ist:
Von stack1 poppen und auf stack2 pushen

Dann stack1 = stack2

Damit ist stack1 umgedreht. Die Implementierung solltest du selbst hinbekommen, das ist eine einfache while-Schleife.

Davon abgesehen, ist ein Stack wohl nicht die geeignete Datenstruktur für dein Problem, wenn du ihr umdrehen musst. Vielleicht solltest du dir da mal Gedanken machen.