본문 바로가기

C/코드 리뷰

스택 구현

반응형
SMALL

배열을 이용한 스택을 구현해보도록 하겠습니다.

 

설명은 주석을 참고해주시길 바랍니다.

 

#include <stdio.h>

#define MAX_N 100

int top;
int stack[MAX_N]; // 최대 스택 크기 100, index로는 0 ~ 99

void stackInit(void) {
	top = 0;
}

int stackIsEmpty(void) {
	return (top == 0); // top이 0이면 아무것도 없는 상태
}

int stackIsFull(void) {
	return (top == MAX_N); // top이 100이 되어버리면 stack은 꽉 찬 상태
}

int stackPush(int value) {
	if (stackIsFull()) { // stack이 꽉 찼다면 1을 받으니 if문이 실행됩니다.
		printf("stack overflow!");
		return 0;
	}
	stack[top] = value; // 집어넣고
	top++; // top은 올라가고
	return 1;
}

int stackPop(int* value) {
	if (top == 0) {
		printf("stack is Empty");
		return 0;
	}
	top--; // 우선 top을 내리고
	*value = stack[top]; // 주소값에 때려넣습니다.
	return 1;
}

int main(void) {
	int T, N;

	scanf("%d", &T);

	for (int t = 1; t <= T; ++t) {
		scanf("%d", &N);
		stackInit();
		for (int i = 0; i < N; ++i) { // stack에 집어넣습니다.
			int value;
			scanf("%d", &value);
			stackPush(value);
		}

		while (!stackIsEmpty()) { // stack에서 뽑아냅시다.
			int value;
			if (stackPop(&value) == 1) { // 1이면 value에 값이 들어간 상태입니다.
				printf("%d ", value);
			}
		}
		printf("\n");
	}
	return 0;
}

 

반응형
LIST