본문 바로가기
프로그래밍/개발 이야기

[자료구조] Stack의 push, pop을 이용한 출력

by JR2 2021. 4. 3.

 

 

이와 같은 출력 구조를 가지는게 Stack이다.

FILO 이다.

 

구현은 5개의 함수면 충분하다.

init(), isEmpty(), isFull(), push(), pop()

 

void init(void)
{
	top = 0;
}
int isEmpty(void)
{
	return (top == 0);
}
int isFull(void)
{
	return (top == MAX);
}
int push(int a)
{
	if (isFull()) { printf("Stack이 꽉 찼습니다.\n"); return 0; }
	STACK[top++] = a;
	return 1;
}
int pop(int* a)
{
	if (isEmpty()) { printf("Stack이 비었습니다.\n"); return 0; }
	*a = STACK[--top];
	return 1;
}

 

이제 사용해 보겠다.

 

int main(void) {

	init();
	int a;

	int flag = 1;
	while (flag)
	{
		printf("PUSH : 1, POP : 2 를 입력하세요 :");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			printf("PUSH 할 값을 입력하세요 :");
			int b;
			scanf("%d", &b);
			if (push(b)) printf("PUSH가 완료되었습니다.\n\n");
			else printf("PUSH에 실패하였습니다.\n\n");
			break;
		case 2:
			int c;
			if (pop(&c)) printf("POP된 값은 %d 입니다.\n\n", c);
			else printf("POP에 실패하였습니다.\n\n");
			break;
		default:
			printf("프로그램을 종료합니다.\n\n");
			flag = 0;
			break;
		}
	}
	return 0;
}

이렇게 간단하게 사용할 수 있다.

 

전체코드

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#define MAX 10

int STACK[MAX];
int top = 0;

void init(void);
int isEmpty(void);
int isFull(void);
int push(int a);
int pop(int* a);

int main(void) {

	init();
	int a;

	int flag = 1;
	while (flag)
	{
		printf("PUSH : 1, POP : 2 를 입력하세요 :");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			printf("PUSH 할 값을 입력하세요 :");
			int b;
			scanf("%d", &b);
			if (push(b)) printf("PUSH가 완료되었습니다.\n\n");
			else printf("PUSH에 실패하였습니다.\n\n");
			break;
		case 2:
			int c;
			if (pop(&c)) printf("POP된 값은 %d 입니다.\n\n", c);
			else printf("POP에 실패하였습니다.\n\n");
			break;
		default:
			printf("프로그램을 종료합니다.\n\n");
			flag = 0;
			break;
		}
	}
	return 0;
}

void init(void)
{
	top = 0;
}
int isEmpty(void)
{
	return (top == 0);
}
int isFull(void)
{
	return (top == MAX);
}
int push(int a)
{
	if (isFull()) { printf("Stack이 꽉 찼습니다.\n"); return 0; }
	STACK[top++] = a;
	return 1;
}
int pop(int* a)
{
	if (isEmpty()) { printf("Stack이 비었습니다.\n"); return 0; }
	*a = STACK[--top];
	return 1;
}

댓글