Page 134 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 134

실습 4-2[A]                                              •완성 파일 chap04/IntStack.c
                     01  /* int형 스택 IntStack(소스) */
                     02  #include <stdio.h>
                     03  #include <stdlib.h>
                     04  #include "IntStack.h"
                     05
                     06  /*--- 스택 초기화 ---*/
                     07  int Initialize(IntStack *s, int max)
                     08  {
                     09    s->ptr = 0;
                     10    if((s->stk = calloc(max, sizeof(int))) == NULL) {
                     11      s->max = 0;   /* 배열의 생성에 실패 */
                     12      return -1;
                     13    }
                     14    s->max = max;
                     15    return 0;
                     16  }
                     17                                                       (실습 4-2[B]에서 계속)



                   초기화 함수 Initialize
                   Initialize 함수는 스택의 메모리 공간(배열)을 확보하는 등의 준비 작업을 수행하는 함수이며,

                   배열을 위한 메모리 공간을 만들 때 스택은 비어 있어야(데이터가 하나도 쌓여 있지 않은 상태) 합
                   니다. 따라서 스택 포인터 ptr 값을 0, 요소의 개수는 max인 배열 stk를 생성합니다. 또 매개
                   변수 max로 받은 값을 스택 최대 용량을 나타내는 구조체의 멤버 max에 저장합니다. 따라서
                   스택의 개별 요소는 바닥(bottom)부터 stk[0], stk[1], …, stk[max – 1]이 됩니다.

                      배열을 위한 메모리 공간을 확보하는 데 실패하면 max의 값을 0으로 해야 하는데, 이는 존재하지 않는 배열 stk에 다른
                   함수의 접근을 막기 위해서입니다.


                    typedef struct {
                      int max;   /* 스택 용량 */                      IntStack
                      int ptr;   /* 스택 포인터 */                  max  8
                                                                    4
                                                               ptr
                      int *stk;  /* 스택을 가리키는 포인터 */            stk
                    } IntStack;
                           바닥        19             0  19      쌓여 있는
                                     22             1  22   ptr 데이터 수
                                     37             2  37
                           꼭대기       53             3  53                 max 스택의 최대 용량
                                                ptr  ❹
                                                    5
                                                    6
                                                    7


                                              [그림 4-3] 스택의 구현 예
                   134   C 알고리즘
   129   130   131   132   133   134   135   136   137   138   139