/* Unorderd Array */ #include #define BUFSIZE 256 #define DATANUM 15 /* 配列のサイズ(最大データ数) */ /* 配列データ */ int data[DATANUM] = { 123, 106, 777, 580, 216, 136, 800, 351, 103, 197 }; /* データの個数 */ int datanum = 10; void dispdata(); int inputdata(); int insert( int n ); int inserth( int n ); int search( int n ); int deletet( int i ); int delete( int i ); int minimum(); int maximum(); main() { char buf[BUFSIZE]; int n, i; printf("コマンド一覧\n"); printf("i:挿入 (Insert tail)\n"); printf("h:挿入 (insert Head)\n"); printf("s:検索 (Search)\n"); printf("d:削除 (Delete idx & move tail)\n"); printf("D:削除 (Delete idx & move)\n"); printf("t:削除 (delete data & move Tail)\n"); printf("m:削除 (delete data & Move)\n"); printf("n:最小値(miNimum)\n"); printf("x:最大値(maXimum)\n"); printf("c:全消去(Clear all)\n"); printf("q:終了 (Quit)\n"); while(1) { dispdata(); printf("[MENU] i,h:挿入、s:検索、d,D,t,m:削除、n:最小値、x:最大値、c:全消去、q:終了\n"); fgets( buf, BUFSIZE, stdin ); switch( buf[0] ) { case 'i': /* データを最後に挿入 */ if( insert( n = inputdata() ) < 0 ) printf("配列の容量を越えるので挿入できませんでした。\n"); else printf("データ %d を最後に挿入しました。\n", n ); break; case 'h': /* データを最初に挿入 */ if( inserth( n = inputdata() ) < 0 ) printf("配列の容量を越えるので挿入できませんでした。\n"); else printf("データ %d を最初に挿入しました。\n", n ); break; case 's': /* データを検索 */ if( (i = search( n = inputdata() )) < 0 ) printf("データ %d は見つかりませんでした。\n", n ); else printf("データ %d は %d 番目に見つかりました\n", n, i ); break; case 'd': /* データを削除(最後のデータを移動) */ if( deletet( i = inputidx() ) < 0 ) printf("%d 番目のデータは削除できませんでした。\n", i ); else printf("%d 番目のデータを消去し、最後のデータを移動しました。\n", i ); break; case 'D': /* データを削除(後のデータをずらす) */ if( delete( i = inputidx() ) < 0 ) printf("%d 番目のデータは削除できませんでした。\n", i ); else printf("%d 番目のデータを消去し、後のデータをずらしました。\n", i ); break; case 't': /* データを削除(最後のデータを移動) */ if( (i = search( n = inputdata() )) < 0 ) printf("データ %d は見つかりませんでした。\n", n ); else { if( deletet( i ) < 0 ) printf("%d 番目のデータは削除できませんでした。\n", i, n ); else printf("%d 番目のデータ %d を消去し、最後のデータを移動しました。\n", i, n ); } break; case 'm': /* データを削除(後のデータをずらす) */ if( (i = search( n = inputdata() )) < 0 ) printf("データ %d は見つかりませんでした。\n", n ); else { if( delete( i ) < 0 ) printf("%d 番目のデータは削除できませんでした。\n", i, n ); else printf("%d 番目のデータ %d を消去し、後のデータをずらしました。\n", i, n ); } break; case 'n': /* 最小値を求める */ if( (i = minimum()) < 0 ) printf("配列が空なので最小値はありません。\n"); else printf("最小値は %d 番目の %d です。\n", i, data[i] ); break; case 'x': /* 最大値を求める */ if( (i = maximum()) < 0 ) printf("配列が空なので最大値はありません。\n"); else printf("最大値は %d 番目の %d です。\n", i, data[i] ); break; case 'c': /* 全データ削除 */ datanum = 0; printf("全てのデータを消去しました。\n"); break; case 'q': case 'Q': /* 終了 */ exit(1); default: continue; } } } /* 全データを表示する関数 */ void dispdata() { int i; for( i = 0; i < datanum; i++ ) printf(" <%2d>", i ); printf("\n"); for( i = 0; i < datanum; i++ ) printf("%5d", data[i] ); printf("\n"); } /* データをキー入力する関数 */ int inputdata() { char buf[BUFSIZE]; int n; do { printf("データを入力して下さい:"); fgets( buf, BUFSIZE, stdin ); } while( sscanf( buf, "%d", &n ) != 1 ); return( n ); } /* インデックスをキー入力する関数 */ int inputidx() { char buf[BUFSIZE]; int n; do { printf("インデックスを入力して下さい:"); fgets( buf, BUFSIZE, stdin ); } while( sscanf( buf, "%d", &n ) != 1 ); return( n ); } /********************************************************************** 完成に向けて作成すべき関数はこの下に集められている。 return( -1 ); 等はその関数が未完成であっても、 コンパイルして他の部分のテストを可能にするためのダミー文 **********************************************************************/ /* 引数で与えられたデータを配列の最後に挿入する関数 当初の配列のサイズを越えて挿入できない場合は-1を返す (テストは i コマンドで) */ int insert( int n ) { /* さー考えよう! */ return( -1 ); } /* 引数で与えられたデータを配列の最初に挿入する関数 当初の配列のサイズを越えて挿入できない場合は-1を返す (テストは h コマンドで) */ int inserth( int n ) { /* さー考えよう! */ return( -1 ); } /* 引数で与えられたデータを配列から探す関数 見つかったらそのインデックスを返し、見つからなければ-1を返す (テストは s コマンドで) */ int search( int n ) { /* さー考えよう! */ return( -1 ); } /* 引数で与えられたインデックスのデータを配列から消去し、その場所に最後のデータを移動する関数 削除できない場合は-1を返す (テストは d コマンドで) */ int deletet( int i ) { /* さー考えよう! */ return( -1 ); } /* 引数で与えられたインデックスのデータを配列から消去し、後ろのデータを順にずらす関数 削除できない場合は-1を返す (テストは D コマンドで) */ int delete( int i ) { /* さー考えよう! */ return( -1 ); } /* 配列データの最小値を求めて、そのインデックスを返す関数 見つからなければ-1を返す (テストは n コマンドで) */ int minimum() { /* さー考えよう! */ return( -1 ); } /* 配列データの最大値を求めて、そのインデックスを返す関数 見つからなければ-1を返す (テストは x コマンドで) */ int maximum() { /* さー考えよう! */ return( -1 ); } /* end of uarray0.c */