Stack in C#

Saheeda

Mitglied
Hallo,

ich habe einen Stack namens calcMemory, auf den ich mit calcMemory.Push() Zahlen lege. Ich würde erwarten, dass meine ToString-Methoden links die unterste Zahl schreibt, rechts die oberste.
calcMemory.Push(1);
calcMemory.Push(2);
calcMemory.Push(3);
calcMemory.Push(4);
sollte also als [1 | 2 | 3 | 4] ausgegeben werden.
(Derselbe Code in Java liefert mir auch dieses Ergebnis.)

Stattdessen fügt der Stack Objekte ganz am Anfang ein, die Ausgabe lautet also [4 | 3 | 2 | 1].

Code:
public string ToString()
        {
            string output = "";
            for (int i = 0; i < calcMemory.Count(); i++)
            {
                output += calcMemory.ElementAt(i);
                if (i != calcMemory.Count() - 1)
                {
                    output += " | ";
                }
            }
            return output;
        }

Funktioniert in C# ein Stack anders, als in Java?
 
Hallo Saheeda

Der Stack in C# verhält sich so wie man es von einem Stack erwarten würde. Ein Stack ist LIFO, entsprechend ist die Folge in der die Elemente zurückkommen genau umgekehrt zu der Reihenfolge in der du sie auf den Stack legst. Das ist einer der wesentlichen Punkte, die einen Stack von einer Queue unterscheiden. Stack: LIFO, Queue: FIFO.

Viele Grüsse
Cromon
 
Hallo Cromon,

naja, aber in Java werden neue Objekte am Ende (bei Index size-1) eingefügt bzw. weggenommen, in C# bei Index 0.
Gibts dafür nen tieferen Sinn oder ist es halt einfach definitionssache?
 
Hallo Saheeda

Der Grund für den Unterschied findet mal wohl darin, dass der indexierte Zugriff auf eine Stack eigentlich keine Operation ist, die von einem Stack erwartet wird. Ich kann mir kaum vorstellen, dass in Java die Elemente vom unteren Teil des Stackes entfernt werden, denn dies verletzt das Grundprinzip eines jeden Stacks. Anfang und Ende eines Stackes sind beide identisch. Daher ist auch die Implementierung in C# logischer und berücksichtigt die Grundeigenschaften eines Stacks.

Viele Grüsse
Cromon
 
Zurück