일반적인 배열 스택
이전에 다룬 스택 포스트와 아주 똑같다. 단지 달라진 점이라면 스택을 전역화 시키지 않아서 여러개의 스택을 생성할 수 있다는 것이다. 코드를 보면서 이해해 보자.
typedef int element;
typedef struct { int top; element stack[MAX_STACK_SIZE];}StackType; // 스택 자체를 구조체로 만든다.
void init(StackType *s){ s->top = -1;} // 스택이 구조첵 아니기 때문에 함수마다 스택을 매개변수로 받아줘야 한다.
int is_empty(StackType *s){ return s->top == -1;}
int is_full(StackType *s){ return s->top == MAX_STACK_SIZE -1;}
void push(StackType *s, element item){ if (is_full(s)) return; s->stack[++(s->top)] = item;}
element pop(StackType *s){ if (is_empty(s)) exit(1); return s->stack[s->top--];}
element peek(StackType *s){ if (is_empty(s)) exit(1); return s->stack[s->top];}
int main(){ StackType s; init(&s); push(&s, 1); push(&s, 2); push(&s, 3); printf("%d\n", pop(&s)); printf("%d\n", pop(&s)); printf("%d\n", pop(&s)); printf("%d\n", is_empty(&s));}
상단 주석에 나와있다시피 스택을 전역으로 지정하지 않았기 때문에 함수마다 스택을 매개변수로 설정해줘야 한다. 그 외에는 달라진 점이 없어서 설명할 건덕지도 없다.
댓글 없음:
댓글 쓰기