Wie man eine Stapel-Datenstruktur in C implementiert

W

p>Ein Stapel ist eine grundlegende Datenstruktur, die in der gesamten Informatik üblich ist. Ein Stapel wird beispielsweise von Ihrem Webbrowser verwendet, um sich die letzten Seiten zu merken, auf denen Sie sich befanden. Entwickler und Programmierer sollten mit der Struktur sehr vertraut sein, aber wenn Sie neu in der Programmierung sind, gibt es viel zu lernen über ihre Implementierung und Komplexität. Dieses wikiHow zeigt Ihnen, wie Sie eine Stapel-Datenstruktur in C implementieren und Sie auf den Weg zu anderen komplexeren Programmiermethoden bringen.

Implementieren Sie den StackLinked Class Header mit dem unten angegebenen Code. Um die benötigten Methoden zu implementieren, müssen Sie der IDE zunächst die Namen dieser Methoden mitteilen. Um dies zu tun, kopieren Sie einfach den Code in der untenstehenden Box in Ihre StackLinked.h-Datei. Ein Stapel kann viele Implementierungen haben, die in ihrer Komplexität variieren; hier werden Sie jedoch die grundlegendste und bekannteste Version implementieren, die aus isEmpty, Push und Pop bestehen wird. In Visual Studio, sobald Sie die Signaturen in StackLinked.h kodiert haben, wird es Ihnen wahrscheinlich einen Fehler anzeigen, bis Sie die Definitionen in der StackLinked.cpp-Datei kodieren; es besteht kein Grund zur Sorge, da Sie dies in den nächsten Schritten tun werden.

Erforsche die Lücken in deinem Verständnis. Wenn Sie sich nicht ganz sicher sind, was eine bestimmte Funktion, ein Operator oder generell eine Zeile in Ihrem Code tut, dann zerlegen Sie sie, um herauszufinden, was genau Sie nicht zusammensetzen können, und suchen Sie sie im Internet. Es ist sehr wahrscheinlich, dass Sie nicht die erste Person sind, die diese Frage hat.

Implementierung isEmpty. Die Funktionalität von isEmpty ist genau so, wie Sie es erwarten würden: Es wird lediglich festgestellt, ob sich Elemente im Stapel befinden. Dazu können Sie einfach überprüfen, ob der oberste Knoten auf etwas verweist. Wenn ja, dann weißt du, dass es nicht leer ist, weil es dort Daten gibt; andernfalls weißt du, dass es leer ist, weil es keinen Platz hat, um etwas zu halten. Du kannst dies tun, weil du weißt, dass die Oberseite den neuesten Gegenstand enthält; wenn also der jüngste Gegenstand nichts ist, bedeutet das, dass es davor nichts gibt. Nochmals unter Bezugnahme auf die Zuganalogie: Wenn Sie wissen wollen, dass ein Zug leer ist, dann überprüfen Sie einfach, ob der Lokomotivwagen mit dem Zug verbunden ist oder etwas enthält. Was die Analogie der Boxen betrifft, so überprüfen Sie einfach, ob es eine Box gibt; wenn nicht, dann gibt es nichts. Die Komplexität dieser Methode ist O(1).

Führen Sie Tests durch. Manchmal, wenn Sie Funktionen implementieren, werden Sie auf Fehler stoßen, aber es gibt keinen Grund zur Sorge. Das bedeutet einfach, dass entweder Sie dem Computer gesagt haben, er solle etwas anderes tun als das, was Sie beabsichtigt haben, oder der Computer versteht einfach nicht, was Sie ihm sagen. Häufige Fehler bei der Implementierung eines Stapels sind unter anderem:

Treten Sie zurück und machen Sie eine Pause vom Code. Versuchen Sie, mental durchzulaufen, wie der Code funktionieren sollte, denken Sie vielleicht an einen besseren Weg, um die gleiche Funktion zu erfüllen, oder denken Sie einfach nicht an das ganze Programm, um Ihr Denken zu erneuern. Sobald du eine mögliche Lösung gefunden hast oder deinen Geist entspannt hast, geh zurück und versuche, sie wieder zu lösen. In den meisten Fällen werden Sie den Fehler sehen können.

Implementieren Sie den Constructor. Um dies zu implementieren, initialisieren Sie den oberen Zeiger auf nullptr. Dies sagt dem Computer, dass er im Moment nicht auf eine bestimmte Speicheradresse zeigt, sondern darauf vorbereitet ist. Dies ist notwendig, weil es logischerweise unmöglich ist, etwas zu verwenden, das nicht gebaut ist. Stellen Sie sicher, dass Sie Kommentare in Ihren Code einfügen, damit Sie ihn besser verstehen. Die Komplexität der Laufzeit ist dabei O(1).

Implementieren Sie den Zerstörer. Der Destruktor wird alle Knoten im Stapel freigeben. Um einen Knoten auszugliedern:

Implementieren Sie das Pop. Die Funktionalität von Pop besteht darin, das oberste Element des Stapels zu entfernen. Da Sie eine verknüpfte Liste (verbundene Boxen) verwenden, achten Sie sehr darauf, dass Sie den Speicher korrekt freigeben.

Implementieren Sie den Push. Die Push-Methode fügt ein Datenelement an die Spitze des Stapels hinzu. Für den Laien bedeutet dies, dass neben den bestehenden “Datenboxen” eine weitere “Box of Data” hinzugefügt wird. Um dies zu tun, bitten Sie den Computer um mehr Platz, legen Sie die gewünschten Daten hinein und verbinden Sie dann die letzte “Box of Data” mit Ihrer neuen “Box of Data”. Stellen Sie sich das entweder wie Stapelboxen oder das Hinzufügen von Zugwagen zu einem Zug vor. Um einen Zugwagen hinzuzufügen, müssen Sie zuerst einen Zugwagen besorgen und ihn mit Dingen füllen, dann den alten Zugwagen mit Ihrem neuen verbinden. Die Komplexität dieser Methode ist O(1).

Fügen Sie den folgenden Code in die Testdatei ein. Fügen Sie den untenstehenden Code in die Datei testStack.cpp ein, die im letzten Schritt erstellt wurde. Dieser Code testet alle Funktionen, die Sie implementiert haben. Lesen Sie unbedingt die Projektbeschreibung, die die Spezifikationen und Testfälle beschreibt. Unnötig zu sagen, dass das Testen von Implementierungen sehr wichtig ist, denn wenn man etwas kodiert hat, das nicht funktioniert, dann war es eigentlich sinnlos, es zu tun. Noch wichtiger ist, dass bei der Arbeit mit der dynamischen Zuweisung keine Speicherlecks, Stapelüberläufe usw. auftreten sollten.

Implementieren Sie StackNode in der StackLinked-Klasse. Da diese Stack-Implementierung eine Linked List verwendet, die nur eine Kette von verbundenen Boxen (Knoten) mit Daten ist, müssen Sie die Klasse StackNode einbeziehen. Um dies wieder zu tun, kopieren Sie einfach den Code von unten in Ihre StackLinked.h-Datei. Dies wird es der Implementierung ermöglichen, die Boxen herzustellen und miteinander zu verbinden. Es ist wichtig, dass Sie diesen Schritt sorgfältig durchführen, denn wenn dies nicht richtig gemacht wird, wird nichts anderes funktionieren. Darüber hinaus kann dies bei falscher Vorgehensweise zu einem Speicherleck führen, was für Ihren Computer nicht gut ist. Du kannst dir das als den Grundbaustein für deinen Stapel vorstellen.

Füge eine neue Datei zu deinem Projekt hinzu. Nachdem der Stapel nun implementiert wurde, validieren Sie das Implementierungsverhalten. Erstellen Sie dazu eine testStack.cpp-Datei, indem Sie die Tastenkombination Strg N verwenden und die Datei testStack.cpp umbenennen. Alternativ können Sie auch mit der rechten Maustaste auf den Quellordner klicken und Neues Element hinzufügen wählen, dieses Element in testStack.cpp umbenennen.

Gehen Sie durch die jeweilige Funktion oder das Programm, das ein Problem hat. Visualisieren Sie, was jede Zeile des Codes tut. Dies wird helfen, das Problem gezielt anzugehen.

About the author

By admin

Your sidebar area is currently empty. Hurry up and add some widgets.