https://www.acmicpc.net/problem/10828
스택
- 선형 자료구조
- LIFO(Last-In, First-Out)
- 배열 기반 구현
- 연결리스트 기반 구현
스택 ADT
- init
- empty
- push
- pop
- peek
ADT(Abstract Data Type)
- 추상자료형
- 구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것
#include <stdio.h>
#include <string.h>
typedef struct
{
int arr[10000];
int top;
} stack;
void init(stack* ps)
{
ps->top = -1; // -1은 스택에 데이터가 없는 상태
}
void push(stack* ps, int data)
{
ps->top++;
ps->arr[ps->top] = data;
}
void pop(stack* ps)
{
if (ps->top >= 0) // 스택에 데이터가 있으면
{
printf("%d\n", ps->arr[ps->top]);
ps->top--;
}
else // 없으면
printf("-1\n");
}
void size(stack* ps)
{
printf("%d\n", ps->top + 1);
}
void isEmpty(stack* ps)
{
if (ps->top == -1)
printf("1\n");
else
printf("0\n");
}
void top(stack* ps)
{
if (ps->top >= 0)
printf("%d\n", ps->arr[ps->top]);
else
printf("-1\n");
}
stack mystack;
int main()
{
char str[20];
int n, data;
scanf("%d", &n);
init(&mystack);
for (int i = 0; i < n; i++)
{
scanf("%s", str);
if (strcmp(str, "push") == 0)
{
scanf("%d", &data);
push(&mystack, data);
}
else if (strcmp(str, "pop") == 0)
{
pop(&mystack);
}
else if (strcmp(str, "size") == 0)
{
size(&mystack);
}
else if (strcmp(str, "empty") == 0)
{
isEmpty(&mystack);
}
else if (strcmp(str, "top") == 0)
{
top(&mystack);
}
}
return 0;
}