fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include <stdbool.h>
  5.  
  6. #define MAX_SIZE 100
  7.  
  8. typedef struct
  9. {
  10. int key;
  11. int data;
  12. } element;
  13.  
  14. typedef struct
  15. {
  16. element* item;
  17. int top;
  18. } Stack;
  19.  
  20. void CreateStack(Stack* sp)
  21. {
  22. element ele[MAX_SIZE];
  23.  
  24. int i=0;
  25. for(i=0; i<100; i++)
  26. {
  27. ele[i].data = i+1000;
  28. ele[i].key = i+1000;
  29. }
  30.  
  31. //함수 내부에 정적변수'는 함수 밖으로 나가면. 소멸 되거나.
  32. //남더라도. 변경이 될 수 있을겁니다.
  33. sp->item = ele;
  34. sp->top = -1;
  35. printf("CreateStack() ele %x\n", ele);
  36. printf("CreateStack() sp->item %x\n", sp->item);
  37. printf("CreateStack() sp->item->data %d\n", sp->item->data);
  38. printf("CreateStack() sp->item->key %d\n", sp->item->key);
  39. }
  40.  
  41. bool Push(Stack* sp, element ele)
  42. {
  43. if (sp->top == 100)
  44. {
  45. printf("error : stack is full");
  46. return false;
  47. }
  48. else
  49. {
  50. sp->top++;
  51. printf("Push() sp->item[sp->top].data %d\n", sp->item[sp->top].data);
  52. printf("Push() sp->item[sp->top].key %d\n", sp->item[sp->top].key);
  53.  
  54. sp->item[sp->top].data = ele.data;
  55. sp->item[sp->top].key = ele.key;
  56. printf("Push() sp->top %d\n", sp->top);
  57. return true;
  58. }
  59. return true;
  60. }
  61.  
  62. element Pop(Stack* sp)
  63. {
  64. if (sp->top == -1)
  65. {
  66. printf("error : stack is empty\n");
  67. }
  68. else
  69. {
  70. printf("Pop() sp->top %d\n", sp->top);
  71. element temp;
  72. temp = sp->item[sp->top];
  73. sp->top--;
  74. return temp;
  75. }
  76. }
  77.  
  78. bool IsFull(Stack* sp)
  79. {
  80. if (sp->top == 100)
  81. {
  82. printf("Stack is full\n");
  83. return true;
  84. }
  85. else
  86. {
  87. printf("Stack is not full\n");
  88. return false;
  89. }
  90. }
  91.  
  92. bool IsEmpty(Stack* sp)
  93. {
  94. if (sp->top == -1)
  95. {
  96. printf("Stack is empty\n");
  97. return true;
  98. }
  99. else
  100. {
  101. printf("Stack is not empty\n");
  102. return false;
  103. }
  104. }
  105.  
  106. void PrintStack(Stack* sp)
  107. {
  108. for (int i = 0; i < sp->top; i++)
  109. {
  110. printf("%d %d\n", sp->item[i].key, sp->item[i].data);
  111. }
  112. }
  113.  
  114. int main()
  115. {
  116. element el1;
  117. el1.data = 10;
  118. el1.key = 1;
  119.  
  120. element el2;
  121. el2.data = 20;
  122. el2.key = 2;
  123.  
  124. element el3;
  125. el3.data = 30;
  126. el3.key = 3;
  127.  
  128. element el4;
  129. el4.data = 40;
  130. el4.key = 4;
  131.  
  132. Stack st1;
  133. Stack* stp;
  134. stp = &st1;
  135.  
  136. CreateStack(stp);
  137. printf("main() stp->item %x\n", stp->item);
  138. printf("main() stp->top %d\n", stp->top);
  139.  
  140. for (int i = 0; i < 10; i++)
  141. {
  142. printf("main() %d %d\n", stp->item[i].key, stp->item[i].data);
  143. }
  144.  
  145. Push(stp, el1);
  146. Push(stp, el2);
  147. Push(stp, el3);
  148. Push(stp, el4);
  149. Push(stp, el1);
  150. Push(stp, el2);
  151.  
  152. element tmp1 = Pop(stp);
  153.  
  154. for (int i = 0; i < stp->top; i++)
  155. {
  156. printf("%d %d\n", stp->item[i].key, stp->item[i].data);
  157. }
  158.  
  159. PrintStack(stp);
  160. IsFull(stp);
  161. IsEmpty(stp);
  162. return 0;
  163. }
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
CreateStack() ele 1e954ae0
CreateStack() sp->item 1e954ae0
CreateStack() sp->item->data 1000
CreateStack() sp->item->key 1000
main() stp->item 1e954ae0
main() stp->top -1
main() 1000 1000
main() 1001 1001
main() 1002 1002
main() 1003 1003
main() 1004 1004
main() 1005 1005
main() 1006 1006
main() 1007 1007
main() 1008 1008
main() 1009 1009
Push() sp->item[sp->top].data 1000
Push() sp->item[sp->top].key 1000
Push() sp->top 0
Push() sp->item[sp->top].data 1001
Push() sp->item[sp->top].key 1001
Push() sp->top 1
Push() sp->item[sp->top].data 1002
Push() sp->item[sp->top].key 1002
Push() sp->top 2
Push() sp->item[sp->top].data 1003
Push() sp->item[sp->top].key 1003
Push() sp->top 3
Push() sp->item[sp->top].data 1004
Push() sp->item[sp->top].key 1004
Push() sp->top 4
Push() sp->item[sp->top].data 1005
Push() sp->item[sp->top].key 1005
Push() sp->top 5
Pop() sp->top 5
1 10
2 20
3 30
4 40
1 10
2 20
3 30
4 40
Stack is not full
Stack is not empty