/* list0801.c */ #define SIZE 20 typedef struct{ int num[SIZE]; int sp; } Stack; Stack *stack_initialize() { Stack *ans; ans = (Stack *)malloc(sizeof(Stack)); ans−>sp = −1; return ans; } void push(Stack *s, int n) { s−>sp += 1; s−>num[s−>sp] = n; } int pop(Stack *s) { int ans; ans = s−>num[s−>sp]; s−>sp −= 1; return(ans); } main() { Stack *s; s = stack_initialize(); push(s,1); push(s,2); push(s,3); printf(”%d\n”,pop(s)); printf(”%d\n”,pop(s)); printf(”%d\n”,pop(s)); free(s) }
typedef struct{ Student *std[SIZE]; int sp; } Stack;
int push(Stack *s, Student *s1) { スタックポインタを1つ進める。 sのstd配列のうち、スタックポインタの位置にある領域に、s1(アドレス値)を書き込む。 }
Student *pop(Stack *s) { sのstd配列のうち、スタックポインタの位置にあるアドレス値を得る。 スタックポインタを1つ戻す。 }
main() { Stack *s; Student *st; s = stack_initialize(); st = (Student *)malloc(sizeof(Student)); set_gakuseki(st,”022002”); set_name(st,”天野淳介”); push(s,st); st = (Student *)malloc(sizeof(Student)); set_gakuseki(st,”022004”); set_name(st,”有川竜則”); push(s,st); st = (Student *)malloc(sizeof(Student)); set_gakuseki(st,”022005”); set_name(st,”淡路啓太”); push(s,st); st = pop(s); student_print(st); free(st); st = pop(s); student_print(st); free(st); st = pop(s); student_print(st); free(st); }
main() { char buff[BUFSIZ]; char gakuseki[BUFSIZ]; char name[BUFSIZ]; Stack *s; Student *st; s = stack_initialize(); while(fgets(buff,BUFSIZ,stdin)!=NULL){ st = (Student *)malloc(sizeof(Student)); sscanf(buff,”%s %s”,gakuseki,name); set_gakuseki(st,gakuseki); set_name(st,name); push(s,st); } while((st=pop(s))!=NULL){ student_print(st); free(st); } }
022021 河村英明 022022 岸田純弥 022023 岸田優樹 022024 岸本崇史 022025 木下俊吾
gcc prac0803.c ./a.out < datafile 022025 木下俊吾 022024 岸本崇史 022023 岸田優樹 022022 岸田純弥 022021 河村英明
/* prac0804.c */ インクルードファイルを列挙する部分 構造体Studentで使う定数をdefineする部分 構造体Studentを宣言する部分 構造体Studentへのアクセサ(関数)の関数名を列挙する部分 (int set_gakuseki(Student *,const char []);、- - - ) 構造体Studentへのアクセサ(関数)の本体を列挙する部分 構造体Stackで使う定数をdefineする部分 構造体Stackを宣言する部分 構造体Stackへのアクセサの関数名を列挙する部分 構造体Stackへのアクセサの本体を列挙する部分 メイン関数