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 알고리즘