정수를 저장하는 스택을 배열로 구현하기
push, pop, size, empty, top등 명령에 따라 스택의 배열을 입력받기.
배열을 사용하여 스택을 구현, n은 10,000미만이라 배열 크기 10,000로 설정. 다른 명령어와 다르게 push를 사용할때는 숫자도 입력받아야함.
strcmp를 사용해서 명령어를 구분
push x 스택에 x를 넣는 명령 > 스택에 값을 추가하고 top 증가
스택의 가장 위에 값 top을 출력하는 명령 >초기엔 아무것도 저장되어있지 않으므로 top=-1로 선언.
스택이 비어있으면 empty 1, 아니면 0을 구현하는 명령 > return (top==-1)로 부울값으로 구현
size 스택의 정수 개수 출력하는 명령 > 아무것도 없는 상태가 top=-1 이라 top+1이 정수의 개수.
pop 가장 위의 정수를 뺴고 그 수 출력하는 명령 >top이 0이상이면 stack[top—]
#include <stdio.h>
#include <string.h>
#define STACK_SIZE 100
int stack[STACK_SIZE] = {0};
int top = -1; // 스택의 가장 위를 가리키는 인덱스
void push(int x);
int pop(void);
int getSize(void);
int isEmpty(void);
int topElement(void);
int main(void)
{
int n, x;
char command[10];
scanf("%d", &n); // 명령의 수 입력받기
for (int i = 0; i < n; i++)
{
scanf("%s", command); // 명령어 입력받기
if (strcmp(command, "push") == 0)
{
scanf("%d", &x); // push 명령어의 경우 숫자도 입력받기
push(x);
}
else if (strcmp(command, "pop") == 0)
{
printf("%d\\n", pop());
}
else if (strcmp(command, "size") == 0)
{
printf("%d\\n", getSize());
}
else if (strcmp(command, "empty") == 0)
{
printf("%d\\n", isEmpty());
}
else if (strcmp(command, "top") == 0)
{
printf("%d\\n", topElement());
}
}
return 0;
}
void push(int x)
{
if (top < STACK_SIZE - 1) // 스택 오버플로우 방지
{
stack[++top] = x; // 스택에 값을 추가하고 top 증가
}
else
{
printf("Stack overflow\\n");
}
}
int pop(void)
{
if (top >= 0)
{
return stack[top--]; // 스택에서 값을 꺼내고 top 감소
}
else
{
return -1; // 스택이 비어있으면 -1 반환
}
}
int getSize(void)
{
return top + 1; // 스택의 크기 반환
}
int isEmpty(void)
{
return (top == -1); // 스택이 비어있으면 1, 아니면 0 반환
}
int topElement(void)
{
if (top >= 0)
{
return stack[top]; // 스택의 최상위 요소 반환
}
else
{
return -1; // 스택이 비어있으면 -1 반환
}
}