stackの実装(続き)
とりあえず実装出来ました。
やっちゃいけないことしてる感があるのと、これでもまだ不完全なのが…(というか、なんで俺はC++使わない縛りをしているんだ?
#define make_stack(x) stack x;x.last=NULL
#define make_stack_p(x) stack *x=(stack*)malloc(sizeof(stack));x->last=NULL
struct _Stack{
void *content;
struct _Stack *front;
};
typedef struct{
struct _Stack *last;
}stack;
void *top(stack *st){
if(st->last == NULL){
return (void*)0x0;
}
return st->last->content;
}
int push(stack *st, void *variable){
struct _Stack *tmp;
tmp = (struct _Stack*)malloc(sizeof(struct _Stack));
if(tmp == NULL)return -1;
if(st->last == NULL){
tmp->front = NULL;
}else{
tmp->front = st->last;
}
tmp->content = variable;
st->last = tmp;
return 0;
}
void *pop(stack *st){
if(st->last == NULL)return NULL;
if(st->last->front == NULL){
st->last = NULL;
}else{
struct _Stack *tmp = st->last;
st->last = st->last->front;
free(tmp);
}
return NULL;
}
ええ、はい。そうです。defineです。
make_stackで宣言してもらうことでメンバ変数の初期化もこなしました。
しかし、これだと(もしかしたらあるんかな)定義していないダブルポインタ以上は扱えないという事に…
よろしくないので、どうにかしたいですね。