C로 만드는 자료구조
스택 명령 처리 + 출력
plas
2020. 3. 12. 19:52
앞의 글에서 살펴본 스택의 기본 코드에 입력과 출력을 추가해 보자. 다음과 같은 형식으로 스택 명령을 처리하는 프로그램을 만들어보자.
앞 글에서 살펴본 stack.h와 stack.c를 이용하여 작성하면 된다. typedef int element; 로 정의되어 있으므로 스택의 요소 타입은 int다.
#include "stack.h"
stack_t stack; // 스택을 지역변수 객체로 선언. 이 변수가 스택객체를 나타낸다.
char command[10];
void doit() {
elem_t val;
scanf_s("%s", command, 10); // 명령을 한 줄씩 읽어서
if (strcmp(command, "end") == 0) {
return;
}
if (strcmp(command, "push") == 0) {
scanf_s("%d", &val);
push(&stack, val);
}
else if (strcmp(command, "pop") == 0) {
printf("value = %d\n", pop(&stack));
}
else if (strcmp(command, "peek") == 0) {
printf("value = %d\n", peek(&stack));
}
else {
printf("명령어 오류: %s\n", command);
return;
}
print_stack(&stack, command); // 각 명령을 수행한 후의 상태를 출력한다.
}
int main(void)
{
init_stack(&stack);
while (strcmp(command, "end") != 0) {
doit();
}
return 0;
}
이렇게 출력하기 위해서는 print_stack 함수가 구현되어야 한다. print_stack 함수는 현재의 스택의 상태를 명령문과 함께 출력해준다.
void print_stack(stack_t* s, char* token)
{
printf("%-4s [stack] ", token);
for (int i = 0; i <= s->top; i++) {
printf("%s", str(s->data[i])); // elem_t 타입에 따라 형식지정자 수정 필요
}
printf("\n");
}