スポンサーリンク

連結リスト(片方向)でpushとpopをc言語で実装

連結リスト(片方向)でpushとpopをc言語で実装してみました。

下記の記事で、配列をスタック構造としてpush/popを実装しています。
参考:スタックのpush,pop関数をC言語とPythonで実装

まずは、片方向リストを構造体で定義します。
リストの構造体には、先頭のノードのポインタをメンバ変数に定義します。
ノードの先頭がわかるようになるので、実装が楽になりました。

続いて、下記は初期化関数です。
最初のノードをmalloc()で確保します。
ノードのpNextNodeにはNULLを代入します。

関数の引数に構造体を渡す場合の注意点を、下記の記事で書いています。

参考:[c言語]関数の引数に構造体を渡す場合の注意(サンプルコードあり)

push関数になります。
while()で終端ノードを探索します。
新規で作成したノードのポインタを、終端ノードのpNextNodeに格納します。

pop関数になります。
while()で終端ノードを探索します。
終端ノードをfree()して、終端ノードの一つ前のpNextNodeにNULLを格納します。

構造体のメンバ変数を参照するサンプルコードを下記の記事で書いています。
参考:[c言語]構造体のメンバ変数を参照するサンプルコード

最後に、リストをfree()してメモリ解放する関数になります。
各ノードを先頭から解放して、最後にリストを解放します。

スポンサーリンク

サンプルコード

下記がサンプルコードになります。
main()関数では、動作確認も兼ねていたので、push/popを複数回繰り返しています。
呼び出し元でのエラーチェックは今回は行っていません。

下記が実行結果になります。

スポンサーリンク