• ベストアンサー

スタックのデータ構造を作りたい

C言語でスタックと、スタックにデータを入れるプッシュ、取り出すポップを作りたいと思っており そこで以下のようなものを作ってみました。 ********************************************** #include<stdio.h> typedef struct{ int a[100]; int head=0; }Stack; void push(Stack stc,int x){ stc.a[head]=x; stc.head++; } int pop(Stack stc){ return(stc.a[head-1]); stc.head--; } int main void{ int j; Stack s; push(s,5); push(s,90); j=pop(s); printf("%d",j); j=pop(s); printf("%d",j); return 0; } ****************************** コンパイルするとエラーが出まくりです。 何をどう直せばよいのか、どこが変なのかご教授いただきたいです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#include<stdio.h> typedef struct{ int a[100]; int head; }Stack; void Stack_init(Stack *stc){ stc->head=sizeof(stc->a)/sizeof(int); } void push(Stack *stc, int x){ stc->a[--(stc->head)]=x; } int pop(Stack *stc){ return(stc->a[stc->head++]); } int main(void){ int j; Stack s; Stack_init(&s); push(&s,5); push(&s,90); j=pop(&s); printf("%d\n",j); j=pop(&s); printf("%d\n",j); return 0; }

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

エラーメッセージみてもわかりませんか? push()/pop() で配列の添え字に使っている head が未定義なのはそのとおりで、多分Stack構造体のメンバー変数 headを使うつもりなのがそうなっていないということですね。 push() で xが使われていないとでているのは前者の影響。 return(stc.a[head-1]); stc.head--; のようにreturn の後に置いてもそれは実行されません(メッセージの通り) ですから、 先に stc.head-- しておいて、その値を使って配列にアクセスする (わざわざ-1してアクセスしているのだから同じこと)か、 return stc.a[--stc.head]; のようにします。 最後に typedef struct{  int a[100];  int head=0; } Stack; ですが、型を定義している(typdef)ところで変数を初期化する ようなこと(int head=0;)はできません。 C++ならコンストラクタで初期化するところですが、Cなら 初期化関数を用意するなどしましょう。

noname#96023
noname#96023
回答No.1

とりあえずエラー書いてくださいよ、全部読むの大変なんだから。 学生以来なので、間違っていたらごめんなさい ぱっと見で変そうなのはreturnした後に計算しても int pop(Stack stc){ return(stc.a[head-1]); stc.head--; } なぜvoid? int main void{

R-gray
質問者

補足

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland algo2-1.c: エラー E2139 algo2-1.c 6: 宣言に ; がない エラー E2451 algo2-1.c 10: 未定義のシンボル head(関数 push ) 警告 W8057 algo2-1.c 12: パラメータ 'x' は一度も使用されない(関数 push ) エラー E2451 algo2-1.c 15: 未定義のシンボル head(関数 pop ) 警告 W8066 algo2-1.c 16: 実行されないコード(関数 pop ) 警告 W8070 algo2-1.c 17: 関数は値を返すべき(関数 pop ) *** 3 errors in Compile *** エラーメッセージは上のようです。 voidについてはint main(void)でした。申し訳ないです。

関連するQ&A

専門家に質問してみよう