스택(Stack)
- LIFO(Last In First Out) 구조 : 한쪽 끝에서만 자료를 넣고 뺄 수 있는 구조
- 스택에 데이터를 push 하면 항상 top에 들어가고, pop 하면 가장 최근에 push 한 데이터가 나온다.
- 맨 위 요소에만 접근할 수 있다.
- 자료가 없을 때 pop하는 오류를 stack underflow라고 한다.
- 스택의 크기 이상의 자료를 push 하려고 할 때의 오류를 stack overflow라고 한다.
장점
- 데이터의 삽입과 삭제가 빠르다.
단점
- 탐색을 하려면 원소 하나하나를 꺼내서 옮겨가면서 해야 한다.
- 맨 위의 원소에만 접근 가능하다.
사용
- 재귀 알고리즘 (재귀 프로그램의 순서 제어 등)
- 역추적을 해야 할 때 (ex) 문서 작업 시 실행 취소)
- ex) 괄호 검사, 역순 문자열 만들기, 후위 표기법으로의 변환
- 함수의 콜 스택
- DFS(깊이 우선 탐색), Flood Fill, 전위/중위/후위 표기법
대표적인 스택의 기능
- push : 데이터를 넣는다.
void push(char data) {
if (!isFull()) {
top++;
stack[top] = data;
}
}
- pop : 데이터를 뺀다.
char pop() {
if (!isEmpty()) {
char temp = stack[top];
top--;
return temp;
}
}
- top (peek) : 맨 위의 데이터를 알려준다.
char peek() {
if (!isEmpty()) {
return stack[top];
}
}
- empty (isEmpty) : 스택이 비어있는지 알려준다.
int isEmpty() {
if (top == -1) {
printf("Error : Stack is empty.\n");
return 1;
}
return 0;
}
- isFull : 스택에 원소가 없으면 'false', 있으면 'true'값을 반환한다.
int isFull() {
if (top >= SIZE - 1) {
printf("Error : Stack is Full.\n");
return 1;
}
return 0;
}
- size : 스택에 몇 개의 데이터가 있는지 알려준다.
- ShowStack (printStack) : 스택에 있는 값들을 출력한다.
void printStack() {
if (!isEmpty()) {
for (int i = 0; i <= top; i++) {
printf("%c ", stack[i]);
}
printf("\n");
}
}
References
[자료구조] 스택(Stack), 큐(Queue), 덱(Deque)
스택(stack), 큐(queue), 덱(deque)의 특징, 시간 복잡도, 장/단점, 사용하는 경우
velog.io
[자료구조] 스택, 큐, 덱 (Stack, Queue, Deque)
스택(stack) 리스트의 한쪽 끝으로만 자료의 삽입/삭제가 이루어지는 자료 구조 후입선출(LIFO) 방식: push(), pop() 깊이 우선 탐색(DFS)에서 사용 용도: 함수의 콜 스택 후위 표기법으로 표현된 산술식
moonong.tistory.com
itnovice1.blogspot.com/2019/01/blog-post.html
[자료구조] 스택, 큐, 덱
[자료구조] 스택, 큐, 덱 자료구조에는 스택(stack), 큐(Queue), 덱(Deque)등이 있다. 메모리의 영역을 어떻게 처리하느냐의 기준으로 나눔 스택(Stack) 먼저 들어간 자료가 나중에 나옴 시스템 해킹에서
itnovice1.blogspot.com
[자료구조] (C언어) 배열을 이용해 스택(Stack) 구현하기
스택의 정의 : https://rpatm.tistory.com/39?category=891100 [자료구조] 스택(Stack)의 정의 일반적으로 여러 개의 원소를 나타낼 때는 배열(Array), 또는 연결 리스트(Linked List)로 나타냅니다. 이렇게 나타..
rpatm.tistory.com
blog.naver.com/tipsware/221211999708
[Quiz] 답안 - C 언어로 Stack 구현하기
이 글은 아래 문제에 대한 답안입니다. 이 문제의 답은 매우 다양하기 때문에 최대한 예시를 많이 소개하도...
blog.naver.com
'Computer Science > Algorithm' 카테고리의 다른 글
#06. 덱(Deque) (0) | 2021.02.05 |
---|---|
#05. 큐(Queue) (0) | 2021.02.05 |
#03. 유클리드 호제법, 유클리드 알고리즘(Euclidean algorithm) (0) | 2021.02.04 |
#02. 에라토스테네스의 체(Sieve of Eratosthenes) (0) | 2021.02.04 |
#01. 이분탐색(Binary Search), 이진탐색 (0) | 2021.02.04 |