#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#define line 100
typedef struct{
double weight;
double eyesight;
int age;
int height;
} Data;
typedef struct{
char *name;
Data data;
} sinntaisokutei ;
typedef struct{
int max;
int pos;
sinntaisokutei **stack;
} sinntaisokuteistack;
int Initialize(sinntaisokuteistack *s, int max){
s->pos = 0;
if ((s
->stack
= calloc(max
, sizeof(sinntaisokutei
*))) == NULL
) { s->max = 0;
return -1;
}
s->max = max;
return 0;
}
void Terminate(sinntaisokuteistack *s){
if (s->stack != NULL){
while( --s->pos >= 0)
}
s->max = s->pos = 0;
}
int Push(sinntaisokuteistack *s, sinntaisokutei *x){
if (s->pos >= s->max) {
return -1;
}
if ((s
->stack
[s
->pos
] = calloc(1, sizeof(sinntaisokutei
))) == NULL
) { return -1;
}
memcpy(s
->stack
[s
->pos
++],x
,sizeof(sinntaisokutei
)); return 0;
}
int Pop(sinntaisokuteistack *s, sinntaisokutei *x){
if (s->pos <= 0){
return -1;
}
s->pos--;
memcpy(x
,s
->stack
[s
->pos
],sizeof(sinntaisokutei
)); return 0;
}
int Peek(sinntaisokuteistack *s, sinntaisokutei *x){
if (s->pos <= 0) {
return -1;
}
memcpy(x
,s
->stack
[s
->pos
-1],sizeof(sinntaisokutei
)); return 0;
}
int Maximumnumber(const sinntaisokuteistack *s){
return s->max;
}
int Registrationnumber(const sinntaisokuteistack *s){
return s->pos;
}
void Print2(const sinntaisokutei *x){
printf("%-18.18s%.2lf%5.4d%5.4d%.2lf\n", x
->name
, x
->data.
weight, x
->data.
age, x
->data.
height, x
->data.
eyesight); }
void Print(const sinntaisokuteistack *s){
int i;
for(i = 0; i < s->pos; i++) {
Print2(s->stack[i]);
}
}
int main(void){
sinntaisokuteistack s;
int max;
if (Initialize(&s, max)==-1){
return 1;
}
while (1) {
int select;
sinntaisokutei x[line];
printf("現在のデータ数:%d/%d\n",Registrationnumber
(&s
), Maximumnumber
(&s
)); printf("(1)登録 (2)削除 (3)次に削除されるデータ (4)全データ表\示 (0)終了:"); if (select == 0) break;
switch (select) {
case 1:
if (Push(&s, x) == -1)
puts("\aエラー:登録できませんでした.\n"); break;
case 2:
if (Pop(&s, x) == -1)
puts("\aエラー:削除出来ませんでした.\n"); else{
Print2(x);
}
break;
case 3:
if (Peek(&s, x) == -1)
puts("\aエラー:表\示できませんでした.\n"); else{
}
break;
case 4:
Print(&s);
break;
}
}
Terminate(&s);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+IAojaW5jbHVkZSA8c3RyaW5nLmg+IAojaW5jbHVkZSA8c3RkbGliLmg+IAojaW5jbHVkZSA8bGltaXRzLmg+CiNkZWZpbmUgbGluZSAxMDAKCgp0eXBlZGVmIHN0cnVjdHsKCWRvdWJsZSB3ZWlnaHQ7Cglkb3VibGUgZXllc2lnaHQ7CglpbnQgYWdlOwoJaW50IGhlaWdodDsKfSBEYXRhOwoKdHlwZWRlZiBzdHJ1Y3R7CgljaGFyICpuYW1lOwoJRGF0YSBkYXRhOwp9IHNpbm50YWlzb2t1dGVpIDsKIAp0eXBlZGVmIHN0cnVjdHsgCmludCBtYXg7ICAKaW50IHBvczsgIApzaW5udGFpc29rdXRlaSAqKnN0YWNrOyAKfSBzaW5udGFpc29rdXRlaXN0YWNrOwoKCmludCBJbml0aWFsaXplKHNpbm50YWlzb2t1dGVpc3RhY2sgKnMsIGludCBtYXgpeyAKcy0+cG9zID0gMDsgCmlmICgocy0+c3RhY2sgPSBjYWxsb2MobWF4LCBzaXplb2Yoc2lubnRhaXNva3V0ZWkgKikpKSA9PSBOVUxMKSB7IApzLT5tYXggPSAwOyAKcmV0dXJuIC0xOyAKfSAKCnMtPm1heCA9IG1heDsgCnJldHVybiAwOyAKfSAKIAp2b2lkIFRlcm1pbmF0ZShzaW5udGFpc29rdXRlaXN0YWNrICpzKXsgCmlmIChzLT5zdGFjayAhPSBOVUxMKXsgCndoaWxlKCAtLXMtPnBvcyA+PSAwKSAKZnJlZShzLT5zdGFja1tzLT5wb3NdKTsgCmZyZWUocy0+c3RhY2spOyAKfSAKcy0+bWF4ID0gcy0+cG9zID0gMDsgCn0gCiAKaW50IFB1c2goc2lubnRhaXNva3V0ZWlzdGFjayAqcywgc2lubnRhaXNva3V0ZWkgKngpeyAKaWYgKHMtPnBvcyA+PSBzLT5tYXgpIHsKcmV0dXJuIC0xOwp9IAppZiAoKHMtPnN0YWNrW3MtPnBvc10gPSBjYWxsb2MoMSwgc2l6ZW9mKHNpbm50YWlzb2t1dGVpKSkpID09IE5VTEwpIHsKcmV0dXJuIC0xOyAKfQptZW1jcHkocy0+c3RhY2tbcy0+cG9zKytdLHgsc2l6ZW9mKHNpbm50YWlzb2t1dGVpKSk7CnJldHVybiAwOyAKfSAKCmludCBQb3Aoc2lubnRhaXNva3V0ZWlzdGFjayAqcywgc2lubnRhaXNva3V0ZWkgKngpeyAKaWYgKHMtPnBvcyA8PSAwKXsKIHJldHVybiAtMTsgCn0Kcy0+cG9zLS07Cm1lbWNweSh4LHMtPnN0YWNrW3MtPnBvc10sc2l6ZW9mKHNpbm50YWlzb2t1dGVpKSk7CmZyZWUocy0+c3RhY2tbcy0+cG9zXSk7IApyZXR1cm4gMDsgCn0gCgppbnQgUGVlayhzaW5udGFpc29rdXRlaXN0YWNrICpzLCBzaW5udGFpc29rdXRlaSAqeCl7IAppZiAocy0+cG9zIDw9IDApIHsKcmV0dXJuIC0xOyAKfQptZW1jcHkoeCxzLT5zdGFja1tzLT5wb3MtMV0sc2l6ZW9mKHNpbm50YWlzb2t1dGVpKSk7IApyZXR1cm4gMDsgCn0gCgppbnQgTWF4aW11bW51bWJlcihjb25zdCBzaW5udGFpc29rdXRlaXN0YWNrICpzKXsgCnJldHVybiBzLT5tYXg7IAp9IAoKaW50IFJlZ2lzdHJhdGlvbm51bWJlcihjb25zdCBzaW5udGFpc29rdXRlaXN0YWNrICpzKXsgCnJldHVybiBzLT5wb3M7IAp9IAoKCnZvaWQgUHJpbnQyKGNvbnN0IHNpbm50YWlzb2t1dGVpICp4KXsKCXByaW50ZigiJS0xOC4xOHMlLjJsZiU1LjRkJTUuNGQlLjJsZlxuIiwgeC0+bmFtZSwgeC0+ZGF0YS53ZWlnaHQsIHgtPmRhdGEuYWdlLCB4LT5kYXRhLmhlaWdodCwgeC0+ZGF0YS5leWVzaWdodCk7Cn0KCgp2b2lkIFByaW50KGNvbnN0IHNpbm50YWlzb2t1dGVpc3RhY2sgKnMpeyAKaW50IGk7IApmb3IoaSA9IDA7IGkgPCBzLT5wb3M7IGkrKykgewpQcmludDIocy0+c3RhY2tbaV0pOyAKfQpwdXRjaGFyKCdcbicpOwp9IAoKCmludCBtYWluKHZvaWQpeyAKc2lubnRhaXNva3V0ZWlzdGFjayBzOyAKaW50IG1heDsgCnByaW50Zigi5L2V5Lq655m76Yyy44GX44G+44GZ44GLIik7IApzY2FuZigiJWQiLCAmbWF4KTsgCmlmIChJbml0aWFsaXplKCZzLCBtYXgpPT0tMSl7IApwdXRzKCLnmbvpjLLjgafjgY3jgb7jgZvjgpPvvI5cbiIpOyAKcmV0dXJuIDE7IAp9IAoKd2hpbGUgKDEpIHsgCmludCBzZWxlY3Q7IApzaW5udGFpc29rdXRlaSB4W2xpbmVdOyAKcHJpbnRmKCLnj77lnKjjga7jg4fjg7zjgr/mlbDvvJolZC8lZFxuIixSZWdpc3RyYXRpb25udW1iZXIoJnMpLCBNYXhpbXVtbnVtYmVyKCZzKSk7IApwcmludGYoIigxKeeZu+mMsiAoMinliYrpmaQgKDMp5qyh44Gr5YmK6Zmk44GV44KM44KL44OH44O844K/ICg0KeWFqOODh+ODvOOCv+ihqFznpLogKDAp57WC5LqG77yaIik7IApzY2FuZigiJWQiLCAmc2VsZWN0KTsgCmlmIChzZWxlY3QgPT0gMCkgYnJlYWs7IAoKc3dpdGNoIChzZWxlY3QpIHsgCmNhc2UgMTogCngtPm5hbWU9bWFsbG9jKDEwMjQpOwoKcHJpbnRmKCLlkI3liY06ICIpOyBzY2FuZigiJXMiLCB4LT5uYW1lKTsKcHJpbnRmKCLkvZPph406ICIpOyBzY2FuZigiJWxmIiwgJih4LT5kYXRhLndlaWdodCkpOwpwcmludGYoIuW5tOm9ojogIik7IHNjYW5mKCIlZCIsICYoeC0+ZGF0YS5hZ2UpKTsKcHJpbnRmKCLoppblips6ICIpOyBzY2FuZigiJWxmIiwgJih4LT5kYXRhLmV5ZXNpZ2h0KSk7CnByaW50Zigi6Lqr6ZW3OiAiKTsgc2NhbmYoIiVkIiwgJih4LT5kYXRhLmhlaWdodCkpOwppZiAoUHVzaCgmcywgeCkgPT0gLTEpIApwdXRzKCJcYeOCqOODqeODvO+8mueZu+mMsuOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn++8jlxuIik7IApicmVhazsgCmNhc2UgMjogCmlmIChQb3AoJnMsIHgpID09IC0xKSAKcHV0cygiXGHjgqjjg6njg7zvvJrliYrpmaTlh7rmnaXjgb7jgZvjgpPjgafjgZfjgZ/vvI5cbiIpOyAKZWxzZXsgCnByaW50Zigi5YmK6Zmk44GX44Gf44GX44Gf44OH44O844K/44GvIik7IApQcmludDIoeCk7Cn0gCmJyZWFrOyAKY2FzZSAzOiAKaWYgKFBlZWsoJnMsIHgpID09IC0xKSAKcHV0cygiXGHjgqjjg6njg7zvvJrooahc56S644Gn44GN44G+44Gb44KT44Gn44GX44Gf77yOXG4iKTsgCmVsc2V7IApwcmludGYoIuasoeOBq+WJiumZpOOBleOCjOOCi+ODh+ODvOOCv+OBryVzIiwgeCk7IAp9IApicmVhazsgCmNhc2UgNDogClByaW50KCZzKTsgCmJyZWFrOyAKfSAKfSAKVGVybWluYXRlKCZzKTsgCnJldHVybiAwOyAKfQ==