/* Stack */ #include #define BUFSIZE 256 #define DATANUM 10 /* 配列のサイズ(最大データ数) */ /* スタックデータ */ int data[DATANUM] = { 123, 106, 777, 580, 216 }; /* データの個数 */ int datanum = 5; /* datanum-1 がスタックトップのインデックスを表す */ void dispstack(); int push( int n ); int pop( int *n ); main() { char buf[BUFSIZE]; int n, i; while(1) { dispstack(); printf("[MENU] u:プッシュ(Push)、o:ポップ(Pop)、c:全消去、q:終了\n"); fgets( buf, BUFSIZE, stdin ); switch( buf[0] ) { case 'u': case 'U': /* データをプッシュ */ if( push( n = inputdata() ) < 0 ) printf("スタックが一杯で、Pushできませんでした。\n"); else printf("データ %d をPushしました。\n", n ); break; case 'o': case 'O': /* データをポップ */ if( pop( &n ) < 0 ) printf("スタックが空で、Popできませんでした。\n"); else printf("Popしたデータは %d でした。\n", n ); break; case 'c': /* 全データ削除 */ datanum = 0; printf("全てのデータを消去しました。\n"); break; case 'q': case 'Q': /* 終了 */ exit(1); default: continue; } } } /* 全データを表示する関数 */ void dispstack() { int i; for( i = 0; i == 0 || i < datanum; i++ ) printf(" <%2d>", i ); if( i == datanum ) printf("←TOP"); 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 ); } /* 引数で与えられたデータをPush(配列の最後の要素の次に挿入)する関数 当初の配列のサイズを越えて挿入(Push)できない場合は -1 を返す */ int push( int n ) { /* さー考えよう! */ } /* スタックトップをPop(配列の最後の要素を削除)して、 引数で与えられた場所にその値を格納する関数 配列(スタック)が空で削除(Pop)できない場合は -1 を返す */ int pop( int *n ) { /* さー考えよう! */ } /* end of stack0.c */