読者です 読者をやめる 読者になる 読者になる

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で宣言してもらうことでメンバ変数の初期化もこなしました。

しかし、これだと(もしかしたらあるんかな)定義していないダブルポインタ以上は扱えないという事に…

よろしくないので、どうにかしたいですね。