scanfで次々に正の整数を入力し、最後に0を入力すると、それまでに入 力された整数(最後の0は除く)が逆順に、1行に1つずつ出力されるよう なプログラムを作成せよ。出力には書式文字列 "%d\n" を用いる。 ただし配列機能や再帰は使わないこと。そのかわり、次のヘッダファイ ルistack.hが提供するスタック機能を呼び出して用いる。スタックサイ ズは100あれば十分であるものとする。
// istack.h #include <stdbool.h> struct istack; typedef struct istack *istackp; istackp istack_new(int size); bool istack_isempty(istackp p); void istack_push(istackp p, int v); int istack_pop(istackp p);
参考までにテキスト掲載の実装は次の通り。
// istack.c --- int type stack impl. with array
#include <stdlib.h>
#include "istack.h"
struct istack { int ptr; int *arr; };
istackp istack_new(int size) {
istackp p = (istackp)malloc(sizeof(struct istack));
p->ptr = 0; p->arr = (int*)malloc(size * sizeof(int));
return p;
}
bool istack_isempty(istackp p) { return p->ptr <= 0; }
void istack_push(istackp p, int v) { p->arr[p->ptr++] = v; }
int istack_pop(istackp p) { return p->arr[--(p->ptr)]; }
int istack_top(istackp p) { return p->arr[p->ptr - 1]; }
プログラムでは下請け関数は用いないこと。