書式#include <stdio.hに> する#include <malloc.hを> する#include <stdlib.h>に含ま// 関数宣言 PNODEのcreate_list(); //は、リストを作成し、戻り値は、ヘッドノードリストのアドレスである、ボイド traverse_list(PNODE PHEAD) ; // リストのトラバースBOOLの is_empty(PNODE PHEADを); // 空気かどうかを決定するint型 length_list(PNODE PHEADが); // リンクされたリストの長さ計算 のtypedef 構造体ノード{ int型、データ// データフィールド構造体、ノード* pNext // ポインタフィールド NODE} * PNODE; // ノード間PNODE同等の構造体へのノード等価*構造体INT メイン(){ PNODE PHEAD = NULL; // ノード* PHEAD = NULL構造体に相当する。 PHEAD = create_list(); //は、一本鎖非環式を作成し、PHEADするノードのリストの先頭のアドレスを割り当てる traverse_list(PHEAD)を、// 反復 IF (is_empty(PHEAD)){ のprintf(" リストが空である" ); } 他{ のprintf(" リスト空でない" ); } int型 LEN = length_list(PHEAD); のprintf(" 鎖長Dの%" 、LEN); 戻り 0 ; } PNODE create_list(){ int型lenが; // アクティブなノードの数が int型、I INTヴァル; // ユーザノードの入力値を一時的に記憶 //は、ヘッダーノードが有効なデータ記憶されていない割り当て PNODE PHEAD =(PNODE)はmalloc(はsizeofを(ノード) ); IF(PHEAD == NULL){ のprintf(" 割り当てが失敗し、プログラムが終了" ); 出口( - 1 ); } PNODE PTAIL = PHEAD; PTAIL - > pNext = NULL; // もし一つだけのノードは、この時点でテール・ノード・ポインタ・フィールドに空でなければならない のprintf(「ノードの数をリストする:」); scanfの(「%のD 」、&; LEN) のための(I = 0 ; IはLEN <; Iは++ ){ のprintfは(" :%d個のノードの値を入力してください"、私は+ 。1 ); scanfの(" %のD "、およびヴァル); PNODE PNEW(= PNODE)はmalloc(はsizeof(ノード)); //は、新しいノードを作成する IF(PNEW == NULL){ のprintf(" 割り当てが失敗し、プログラムが終了" ); 出口( - 1 ); } PNEW - >データ=ヴァル; / / データをデータフィールドに格納される pTail-> pNext = PNEW。// 新しいノードアドレスがエンドノードポインタフィールドに割り当てられ pNew-> pNext = NULL; // 空の割り当てられた新しいノードポインタフィールド PTAIL = PNEWを; // エンドノードアドレスに新しいノードをコピーする最後のステップ(すなわち、 )テール・ノードになるために新しいノードせ // ; pHead-> pNext = PNEW // pNew-> pNext = NULL; // 最後のノードのポインタフィールドが空である } 戻りPHEAD; } ボイドtraverse_list(PNODE PHEAD){ PNODEをP = pHead-> pNext; // リストが空の場合、ヘッドノードポインタフィールドが空である場合、pが空である 一方、(P!= NULL){ のprintf(" %のD "、P-> データ)。 P = P->pNext; } のprintf(" \ N- " ); リターン; } BOOLのis_empty(PNODE PHEAD){ IF(pHead-> pNext == NULL){ // ポインタフィールド・ヘッダ・ノードが空の場合、リストが空である リターン trueに、 } 他{ リターン はfalse ; } } int型length_list(PNODE PHEAD){ PNODE P = pHead-> pNext; INT LEN = 0 ; ながら(!P = NULL){ lenを ++ ; P = P->pNext; } }