Advertisement
Guest User

FixedStack

a guest
Jun 20th, 2023
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #define MAX_SIZE 32   // 스택의 최대 사이즈
  3. typedef int element;  // 스택에 넣을 자료의 자료형 element (여기서는 int)
  4.  
  5. // 고정 크기 스택 FixedStack 구조체 선언
  6. typedef struct _FixedStack
  7. {
  8.     element arr[MAX_SIZE];  // MAX_SIZE크기 스택 배열
  9.     int top;                // 스택 top 요소의 인덱스
  10. } FixedStack;
  11.  
  12. // 스택 초기화 함수
  13. void stack_init(FixedStack* s)
  14. {
  15.     s.top = -1;  // 빈 스택 = top 인덱스 변수를 -1일때로 하자.
  16. }
  17.  
  18. // 스택이 비었다면 1, 비어있지 않다면 0을 리턴
  19. int stack_is_empty(FixedStack* s) { return (s->top == -1); }
  20.  
  21. // 스택이 꽉 찼다면 1, 꽉 차지않았다면 0을 리턴
  22. int stack_is_full(FixedStack* s) { return (s->top == MAX_SIZE - 1); }
  23.  
  24. // 스택 s에 새 요소 e를 삽입
  25. void stack_push(FixedStack* s, element e)
  26. {
  27.     // 스택이 꽉 찼다면 삽입할 수 없습니다
  28.     if (stack_is_full(s))
  29.     {
  30.         printf("Stack is full!\n");
  31.         return;
  32.     }
  33.     // 스택에 여유자리가 있으면 삽입
  34.     else
  35.     {
  36.         ++s->top;            // 현재 top 요소의 다음 인덱스에다가
  37.         s->arr[s->top] = e;  // 삽입할 요소 e 삽입!
  38.     }
  39. }
  40.  
  41. // 스택 s로부터 요소를 pop
  42. element stack_pop(FixedStack* s)
  43. {
  44.     // 스택이 비어있다면 요소를 제거할 수 없음. 비어있지 않을 때만 동작
  45.     if (!stack_is_empty(s))
  46.     {
  47.         element pop = s->arr[s->top];  // top 요소를 임시저장
  48.         --s->top;                      // top 인덱스를 하나 감소
  49.         return pop;                    // 임시저장한 top 요소를 리턴
  50.     }
  51. }
  52.  
  53. // 스택의 최상단 요소 읽기
  54. element stack_peek(FixedStack* s) { return s->arr[s->top]; }
  55.  
  56. // 스택 출력
  57. void stack_print(FixedStack* s)
  58. {
  59.     printf("<  Stack  >\n");
  60.  
  61.     if (stack_is_empty(s))
  62.         printf("-- Empty stack --\n");
  63.     else
  64.     {
  65.         // top ~ 0 인덱스까지 반복문으로 출력
  66.         for (int i = s->top; i >= 0; --i)
  67.             printf("   [ %2d ]\n", s->arr[i]);
  68.     }
  69.     printf("\n");
  70. }
  71.  
  72. int main()
  73. {
  74.     FixedStack s;
  75.     stack_init(&s);
  76.  
  77.     stack_print(&s);
  78.  
  79.     stack_push(&s, 10);
  80.     stack_push(&s, 20);
  81.     stack_push(&s, 30);
  82.     stack_push(&s, 40);
  83.     stack_print(&s);
  84.  
  85.     stack_pop(&s);
  86.     stack_pop(&s);
  87.     stack_print(&s);
  88.  
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement