#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct
{
int key;
int data;
} element;
typedef struct
{
element* item;
int top;
} Stack;
void CreateStack(Stack* sp)
{
element ele[MAX_SIZE];
int i=0;
for(i=0; i<100; i++)
{
ele[i].data = i+1000;
ele[i].key = i+1000;
}
//함수 내부에 정적변수'는 함수 밖으로 나가면. 소멸 되거나.
//남더라도. 변경이 될 수 있을겁니다.
sp->item = ele;
sp->top = -1;
printf("CreateStack() ele %x\n", ele
); printf("CreateStack() sp->item %x\n", sp
->item
); printf("CreateStack() sp->item->data %d\n", sp
->item
->data
); printf("CreateStack() sp->item->key %d\n", sp
->item
->key
); }
bool Push(Stack* sp, element ele)
{
if (sp->top == 100)
{
printf("error : stack is full"); return false;
}
else
{
sp->top++;
printf("Push() sp->item[sp->top].data %d\n", sp
->item
[sp
->top
].
data); printf("Push() sp->item[sp->top].key %d\n", sp
->item
[sp
->top
].
key);
sp->item[sp->top].data = ele.data;
sp->item[sp->top].key = ele.key;
printf("Push() sp->top %d\n", sp
->top
); return true;
}
return true;
}
element Pop(Stack* sp)
{
if (sp->top == -1)
{
printf("error : stack is empty\n"); }
else
{
printf("Pop() sp->top %d\n", sp
->top
); element temp;
temp = sp->item[sp->top];
sp->top--;
return temp;
}
}
bool IsFull(Stack* sp)
{
if (sp->top == 100)
{
return true;
}
else
{
printf("Stack is not full\n"); return false;
}
}
bool IsEmpty(Stack* sp)
{
if (sp->top == -1)
{
return true;
}
else
{
printf("Stack is not empty\n"); return false;
}
}
void PrintStack(Stack* sp)
{
for (int i = 0; i < sp->top; i++)
{
printf("%d %d\n", sp
->item
[i
].
key, sp
->item
[i
].
data); }
}
int main()
{
element el1;
el1.data = 10;
el1.key = 1;
element el2;
el2.data = 20;
el2.key = 2;
element el3;
el3.data = 30;
el3.key = 3;
element el4;
el4.data = 40;
el4.key = 4;
Stack st1;
Stack* stp;
stp = &st1;
CreateStack(stp);
printf("main() stp->item %x\n", stp
->item
); printf("main() stp->top %d\n", stp
->top
);
for (int i = 0; i < 10; i++)
{
printf("main() %d %d\n", stp
->item
[i
].
key, stp
->item
[i
].
data); }
Push(stp, el1);
Push(stp, el2);
Push(stp, el3);
Push(stp, el4);
Push(stp, el1);
Push(stp, el2);
element tmp1 = Pop(stp);
for (int i = 0; i < stp->top; i++)
{
printf("%d %d\n", stp
->item
[i
].
key, stp
->item
[i
].
data); }
PrintStack(stp);
IsFull(stp);
IsEmpty(stp);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNpbmNsdWRlIDxzdGRib29sLmg+CgojZGVmaW5lIE1BWF9TSVpFIDEwMAoKdHlwZWRlZiBzdHJ1Y3QgCnsKICAgIGludCBrZXk7CiAgICBpbnQgZGF0YTsKfSBlbGVtZW50OwoKdHlwZWRlZiBzdHJ1Y3QgCnsKICAgIGVsZW1lbnQqIGl0ZW07CiAgICBpbnQgdG9wOwp9IFN0YWNrOwoKdm9pZCBDcmVhdGVTdGFjayhTdGFjayogc3ApCnsKICAgIGVsZW1lbnQgZWxlW01BWF9TSVpFXTsKCiAgICBpbnQgaT0wOwogICAgZm9yKGk9MDsgaTwxMDA7IGkrKykKICAgIHsKICAgICAgICBlbGVbaV0uZGF0YSA9IGkrMTAwMDsKICAgICAgICBlbGVbaV0ua2V5ID0gaSsxMDAwOwogICAgfQogICAgCiAgICAvL+2VqOyImCDrgrTrtoDsl5Ag7KCV7KCB67OA7IiYJ+uKlCDtlajsiJgg67CW7Jy866GcIOuCmOqwgOuptC4g7IaM66m4IOuQmOqxsOuCmC4KICAgIC8v64Ko642U652864+ELiDrs4Dqsr3snbQg65CgIOyImCDsnojsnYTqsoHri4jri6QuCiAgICBzcC0+aXRlbSA9IGVsZTsKICAgIHNwLT50b3AgPSAtMTsKICAgIHByaW50ZigiQ3JlYXRlU3RhY2soKSBlbGUgJXhcbiIsIGVsZSk7CiAgICBwcmludGYoIkNyZWF0ZVN0YWNrKCkgc3AtPml0ZW0gJXhcbiIsIHNwLT5pdGVtKTsKICAgIHByaW50ZigiQ3JlYXRlU3RhY2soKSBzcC0+aXRlbS0+ZGF0YSAlZFxuIiwgc3AtPml0ZW0tPmRhdGEpOwogICAgcHJpbnRmKCJDcmVhdGVTdGFjaygpIHNwLT5pdGVtLT5rZXkgJWRcbiIsIHNwLT5pdGVtLT5rZXkpOwp9Cgpib29sIFB1c2goU3RhY2sqIHNwLCBlbGVtZW50IGVsZSkKewogICAgaWYgKHNwLT50b3AgPT0gMTAwKQogICAgewogICAgICAgIHByaW50ZigiZXJyb3IgOiBzdGFjayBpcyBmdWxsIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHNwLT50b3ArKzsKICAgICAgICBwcmludGYoIlB1c2goKSBzcC0+aXRlbVtzcC0+dG9wXS5kYXRhICVkXG4iLCBzcC0+aXRlbVtzcC0+dG9wXS5kYXRhKTsKICAgICAgICBwcmludGYoIlB1c2goKSBzcC0+aXRlbVtzcC0+dG9wXS5rZXkgJWRcbiIsIHNwLT5pdGVtW3NwLT50b3BdLmtleSk7CgogICAgICAgIHNwLT5pdGVtW3NwLT50b3BdLmRhdGEgPSBlbGUuZGF0YTsKICAgICAgICBzcC0+aXRlbVtzcC0+dG9wXS5rZXkgPSBlbGUua2V5OwogICAgICAgIHByaW50ZigiUHVzaCgpIHNwLT50b3AgJWRcbiIsIHNwLT50b3ApOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmVsZW1lbnQgUG9wKFN0YWNrKiBzcCkKewogICAgaWYgKHNwLT50b3AgPT0gLTEpCiAgICB7CiAgICAgICAgcHJpbnRmKCJlcnJvciA6IHN0YWNrIGlzIGVtcHR5XG4iKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBwcmludGYoIlBvcCgpIHNwLT50b3AgJWRcbiIsIHNwLT50b3ApOwogICAgICAgIGVsZW1lbnQgdGVtcDsKICAgICAgICB0ZW1wID0gc3AtPml0ZW1bc3AtPnRvcF07CiAgICAgICAgc3AtPnRvcC0tOwogICAgICAgIHJldHVybiB0ZW1wOwogICAgfQp9Cgpib29sIElzRnVsbChTdGFjayogc3ApCnsKICAgIGlmIChzcC0+dG9wID09IDEwMCkKICAgIHsKICAgICAgICBwcmludGYoIlN0YWNrIGlzIGZ1bGxcbiIpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHByaW50ZigiU3RhY2sgaXMgbm90IGZ1bGxcbiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKYm9vbCBJc0VtcHR5KFN0YWNrKiBzcCkKewogICAgaWYgKHNwLT50b3AgPT0gLTEpCiAgICB7CiAgICAgICAgcHJpbnRmKCJTdGFjayBpcyBlbXB0eVxuIik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcHJpbnRmKCJTdGFjayBpcyBub3QgZW1wdHlcbiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKdm9pZCBQcmludFN0YWNrKFN0YWNrKiBzcCkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcC0+dG9wOyBpKyspCiAgICB7CiAgICAgICAgcHJpbnRmKCIlZCAlZFxuIiwgc3AtPml0ZW1baV0ua2V5LCBzcC0+aXRlbVtpXS5kYXRhKTsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBlbGVtZW50IGVsMTsKICAgIGVsMS5kYXRhID0gMTA7CiAgICBlbDEua2V5ID0gMTsKCiAgICBlbGVtZW50IGVsMjsKICAgIGVsMi5kYXRhID0gMjA7CiAgICBlbDIua2V5ID0gMjsKCiAgICBlbGVtZW50IGVsMzsKICAgIGVsMy5kYXRhID0gMzA7CiAgICBlbDMua2V5ID0gMzsKCiAgICBlbGVtZW50IGVsNDsKICAgIGVsNC5kYXRhID0gNDA7CiAgICBlbDQua2V5ID0gNDsKCiAgICBTdGFjayBzdDE7CiAgICBTdGFjayogc3RwOwogICAgc3RwID0gJnN0MTsKCiAgICBDcmVhdGVTdGFjayhzdHApOwogICAgcHJpbnRmKCJtYWluKCkgc3RwLT5pdGVtICV4XG4iLCBzdHAtPml0ZW0pOwogICAgcHJpbnRmKCJtYWluKCkgc3RwLT50b3AgJWRcbiIsIHN0cC0+dG9wKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCiAgICB7CiAgICAgICAgcHJpbnRmKCJtYWluKCkgJWQgJWRcbiIsIHN0cC0+aXRlbVtpXS5rZXksIHN0cC0+aXRlbVtpXS5kYXRhKTsKICAgIH0KICAgIAogICAgUHVzaChzdHAsIGVsMSk7CiAgICBQdXNoKHN0cCwgZWwyKTsKICAgIFB1c2goc3RwLCBlbDMpOwogICAgUHVzaChzdHAsIGVsNCk7CiAgICBQdXNoKHN0cCwgZWwxKTsKICAgIFB1c2goc3RwLCBlbDIpOwoKICAgIGVsZW1lbnQgdG1wMSA9IFBvcChzdHApOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RwLT50b3A7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIiVkICVkXG4iLCBzdHAtPml0ZW1baV0ua2V5LCBzdHAtPml0ZW1baV0uZGF0YSk7CiAgICB9CgogICAgUHJpbnRTdGFjayhzdHApOwogICAgSXNGdWxsKHN0cCk7CiAgICBJc0VtcHR5KHN0cCk7CiAgICByZXR1cm4gMDsKfQ==