このディレクトリの索引 http://toro.2ch.net/test/read.cgi/tech/1335517816/617 # [1] 授業単元:アルゴリズムとデータ構造 # [2] 問題文: http://ime.nu/codepad.org/lwC4tzs0 # このコードの関数addNewNodeToHeadとdeleteFirstNodeの中身を完成させてください。 # /*------------------------------------------------ # 連結リストの実装例(リストヘッドによる方法) # ------------------------------------------------*/ # #include# #include # # //DATA型を定義(正体は int 型) # typedef int DATA; # # //NODE型の構造体定義 # typedef struct node { # struct node *next; // 次のノードへのポインタ # DATA data; // データ部 # } NODE; # # //リストの先頭ポインタを保持する変数の宣言 # NODE list_head; # # //関数のプロトタイプ宣言 # void addNewNodeToHead( DATA* ); // 先頭ノードを追加 # void deleteFirstNode(); // 先頭ノードを削除 # void showList(); //リストの表示 # # /*--------------------------------------- # メイン関数 # ---------------------------------------*/ # int main() # { # int key; # DATA value = 1; //格納する値を生成するための変数 # # // リストヘッドの初期化 # list_head.next = NULL; # # //終了の 9 が入力されるまで繰り返す # while( key != 9 ) { # # //リストの表示 # showList(); # # //メニューを表示 # printf("1.先頭に追加,2.先頭を削除,9.終了:"); # # //メニュー番号の入力と分岐 # scanf("%d",&key); # switch( key ) { # # case 1: //リストの先頭にデータを追加 # # //追加するDATA(いまは整数値)を引数に追加関数をよぶ # addNewNodeToHead( &value ); //注意:ノードを追加後,ついでに value をインクリメントしている # break; # # case 2: //先頭のデータを削除 # # //先頭の要素を削除する関数をよぶ # deleteFirstNode(); # break; # } # } # # return 0; # } # # //リストの先頭にノードを追加する # void addNewNodeToHead( DATA *d ) # { # NODE *newNode, *pos; # # # } # # // リストの先頭ノードを削除する # void deleteFirstNode() # { # NODE *pos, *prevNode; # # # } # # //連結リストの状態を表示する # void showList() # { # NODE *pos; //読み出し位置にあるノードへのポインタ変数 # # //最初のノードのアドレスを取得(注意: リストが空の場合は NULL が入っている) # pos = list_head.next; # # //末尾のノードまで繰り返す # while ( pos != NULL ) { # printf("%d ", pos->data); //データ参照して表示 # pos = pos->next; //次のノードに進む # } # # printf("\n\n"); # } # 実行結果 # 1.n番目を追加、2.n番目を削除、9.終了:1 # 何番目を追加しますか:1 # 1: 1 # 1.n番目を追加、2.n番目を削除、9.終了:1 # 何番目を追加しますか:2 # 2: 1 2 # 1.n番目を追加、2.n番目を削除、9.終了:1 # 何番目を追加しますか:2 # 3: 1 3 2 # 1.n番目を追加、2.n番目を削除、9.終了:2 # 何番目を削除しますか:2 # 2: 1 3 # 1.n番目を追加、2.n番目を削除、9.終了:2 # 何番目を削除しますか:3 # 3番目の要素はありません。 # 2: 1 3 # 1.n番目を追加、2.n番目を削除、9.終了:2 # 何番目を削除しますか:2 # 1: 1 # 1.n番目を追加、2.n番目を削除、9.終了:9 # [3.3] 言語: C言語 [4] 期限:5月25日 [5] その他の制限: よろしくお願いします。 # '終了の 9 が入力されるまで繰り返す'(_初期ならび,_実行終了時ならび) :- write('1.n番目を追加、2.n番目を削除、9.終了:1 \n'), get_integer(_メニュー番号), 実行の選択(_メニュー番号,_初期ならび,_実行終了時ならび). 実行の選択(9,_ならび,_ならび) :- !. 実行の選択(1,_実行前ならび,_実行終了時ならび) :- '1.n番目を追加'(_実行前ならび,_追加後のならび), '終了の 9 が入力されるまで繰り返す'(_追加後のならび,_実行終了時ならび). 実行の選択(2,_実行前ならび,_実行終了時ならび) :- '2.n番目を削除'(_実行前ならび,_削除後のならび), '終了の 9 が入力されるまで繰り返す'(_削除後のならび,_実行終了時ならび). '1.n番目を追加'(_実行前ならび,_追加後のならび) :- write('追加する要素番号を入力してください : '), get_integer(_n), write('追加する要素値を入力してください : '), get_line(_要素), 要素をn番目に挿入(_要素,_n,_ならび,_追加後のならび). '2.n番目を削除'(_実行前ならび,_削除後のならび) :- write('追加する要素番号を入力してください : '), get_integer(_n), n番目の要素を取り除く(_n,_ならび,_,_削除後のならび). 先頭に要素を加える(_要素,_ならび,[_要素|_ならび]). 末尾に要素を加える(_要素,_ならび,_末尾に要素を加えたならび) :- append(_ならび,[_要素],_末尾に要素を加えたならび). 先頭の要素を取り除く([_先頭の要素|_先頭の要素を除いたならび],_先頭の要素,_先頭の要素を除いたならび). 末尾の要素を取り除く(_ならび,_末尾の要素,_末尾の要素を除いたならび) :- append(_末尾の要素を除いたならび,[_末尾の要素],_ならび). n番目の要素を表示(_n,_ならび,_n番目の要素) :- length([_|L0],_n), append(L0,[_n番目の要素|_],_ならび), n番目の要素を取り除く(_n,_ならび,_n番目の要素,_n番目の要素を除いたならび) :- length([_|L0],_n), append(L0,[_n番目の要素|R],_ならび), append(L0,R,_n番目の要素を除いたならび). 要素をn番目に挿入(_要素,_n,_ならび,_要素をn番目に挿入されたならび) :- length([_|L1],_n), append(L1,L2,_ならび), append(L1,[_要素|L2],_要素をn番目に挿入されたならび). n番目の要素の置換(_n,_置換要素,_ならび,_n番目の要素を置換されたならび) :- length([_|L0],_n), append(L0,[_|R],_ならび), append(L0,[_置換要素|R],_n番目の要素を置換されたならび).