post list

2013년 12월 19일

[Data Structure] #2-2 일반적인 배열 스택

일반적인 배열 스택


이전에 다룬 스택 포스트와 아주 똑같다. 단지 달라진 점이라면 스택을 전역화 시키지 않아서 여러개의 스택을 생성할 수 있다는 것이다. 코드를 보면서 이해해 보자.

#include <stdio.h>#include <stdlib.h> #define MAX_STACK_SIZE 100

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));}

상단 주석에 나와있다시피 스택을 전역으로 지정하지 않았기 때문에 함수마다 스택을 매개변수로 설정해줘야 한다. 그 외에는 달라진 점이 없어서 설명할 건덕지도 없다. 

댓글 없음:

댓글 쓰기