Ich versuche, ein durch einen Informatikkurs auf coursebuffet.com zu arbeiten, die mich saylor.org bezeichnet, die this gab mir zu erfahren, wie ein implementieren Stack mit einer verketteten Liste in C.verlinkte Liste - Stapel Building - C - Ist das Tutorial richtig
Erstens, ich glaube, ich habe das Konzept verstanden, aber wenn Sie so nett sein und unten in den Link scrollen, finden Sie am Ende davon einen Link zu einer Hauptdatei, mit denen Sie Ihre Implementierung testen sollten. Und was absolut verblüfft mich für die letzten zwei Tage (ja, das ist, wie viel Zeit ich schon in diesem einen Problem sank) ist die folgende Passage:
/*
* Initialize the stack. Make it at least
* big enough to hold the string we read in.
*/
StackInit(&stack, strlen(str));
Ich kann nicht verstehen, wie eine verknüpfte Liste zu initialisieren. Ich meine, das ist gegen sein Konzept, nicht wahr? Ich würde struct Elemente erstellen müssen, bevor sie mit Push-Befehlen gefüllt werden, aber wenn ich das tue, muss ich dem Stapel in zwei Richtungen folgen. Eine Richtung zum Schieben und die entgegengesetzte Richtung zum Knacken. Das würde zwei Zeiger benötigen. Ich dachte, das ganze Konzept wäre ein Datenelement und ein Zeiger pro ADT-Einheit.
Kann mir bitte jemand das erklären?
Der Beispielcode verwendet 'gets()': siehe [Warum 'gets()' ist zu gefährlich, um verwendet zu werden?] (Http://stackoverflow.com/questions/1694036/why-is-the-gets-) Funktion-gefährlich-warum-sollte-es-nicht-benutzt-sein, warum das eine schlechte Idee ist (und was man dagegen tun kann). –
Wenn Sie einen Stapel vom Typ Array verwenden, ist die Länge sinnvoll. Wenn Sie einen verketteten Listenstapel verwenden, macht die Länge keinen Sinn. –
Hinweis: Brauchen Sie strlen (str) + 1, um die Zeichenfolge zu halten, es sei denn, die LL impliziert das Nullzeichen. – chux