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