[c언어] 스택
스택은 후입선출(LIFO, Last In First Out) 방식으로 데이터를 저장하고 처리하는 선형 자료 구조입니다. 새로운 데이터는 항상 스택의 맨 위에 추가되고, 데이터를 꺼낼 때도 마지막에 추가된 데이터가 먼저 꺼내지는 특징을 가지고 있습니다.
스택의 주요 특징
- 순서: 데이터가 추가된 순서를 보존합니다.
- 연산: 데이터의 추가와 삭제가 맨 위에서만 이루어집니다.
- 구현: 배열이나 연결 리스트를 사용하여 구현될 수 있습니다.
스택의 연산
주요 연산으로는 다음과 같은 것들이 있습니다:
push
: 스택 맨 위에 데이터를 추가pop
: 스택 맨 위의 데이터를 삭제하고 반환top
또는peek
: 스택 맨 위의 데이터를 반환 (삭제하지는 않음)
스택의 예시
#include <stdio.h>
#define MAX_SIZE 5
typedef struct Stack {
int arr[MAX_SIZE];
int top;
} Stack;
void push(Stack *stack, int data) {
if (stack->top < MAX_SIZE - 1) {
stack->top++;
stack->arr[stack->top] = data;
printf("%d이(가) 스택에 추가되었습니다.\n", data);
} else {
printf("스택이 가득 찼습니다.\n");
}
}
int pop(Stack *stack) {
if (stack->top >= 0) {
int data = stack->arr[stack->top];
stack->top--;
return data;
} else {
printf("스택이 비었습니다.\n");
return -1;
}
}
int main() {
Stack stack = {{0}, -1};
push(&stack, 10);
push(&stack, 20);
push(&stack, 30);
printf("%d를 꺼냈습니다.\n", pop(&stack));
printf("%d를 꺼냈습니다.\n", pop(&stack));
printf("%d를 꺼냈습니다.\n", pop(&stack));
printf("%d를 꺼냈습니다.\n", pop(&stack));
return 0;
}
위의 예제는 c언어로 스택을 구현한 것입니다.