스택(Stack)과 큐(Queue)는 자료구조의 한 형태이다.
스택(Stack)과 큐(Queue)에 대해 설명하기 앞서 연결리스트(Linked List)도 자료구조의 형태 중 하나인데 이것에 대해 간단히 얘기를 하자면, 정해진 원소 크기가 없는 리스트로 시스템에 추가되는 원소가 동적이거나 메모리 원소가 불연속적인 원소들을 효율적으로 관리해 줄 수 있는 것이다.
스택(Stack)과 큐(Queue)도 연결리스트(Linked List)와 굉장히 유사한데, 먼저 큰 차이에 대해 얘기하자면 스택(Stack)은 LIFO(Last In First Out), 큐(Queue)는 FIFO(First In First Out) 형태를 가지고 있다. 연결리스트 같은 경우에는 일련의 원소들 사이에 원소 끼워넣기가 가능하지만, 스택(Stack)과 큐(Queue)는 LIFO, FIFO 라는 정해진 형식이 있기 때문에 구현이 불가능 한건 아니겠지만, 중간에 원소를 끼워넣는 용도로는 사용하지 않는다는 점에 있어서 차이가 있다.
먼저 스택(Stack)에 대해 얘기를 하자면 앞서 말했듯이 LIFO(Last In First Out) 형태를 지니고 있다. 말그대로 마지막에 들어간 것이 가장 먼저 나온다는 뜻이다.
예시를 들자면, 블럭을 쌓아올리는 개념이다. 블럭을 쌓을때는 밑에서 부터 위로 쌓고, 빼낼 때에는 위에서 부터 하나씩 빼야지 무너지지 않는다. 이런 것 처럼 스택(Stack)은 가장 마지막의 원소(데이터)가 가장 먼저 빠진다는 것이 특징이다.
스택 연산
- push() : 스택에 원소(데이터)를 넣는다.
- pop() : 스택의 가장 마지막 원소(데이터)를 꺼낸다.
- top() : 스택의 가장 마지막 원소(데이터) <-peek()
- empty() : 스택이 비어있는지에 대한 확인
- size() : 스택에 들어있는 원소(데이터)의 갯수
그 다음으로 큐(Queue)에 대해 얘기를 해보자면 FIFO(First In First Out) 형태를 지니고 있다. 이것 또한 말 그대로 가장 먼저 들어간 것이 가장 먼저 나온다는 의미이다.
예시를 들자면, 줄 서 있는 사람들을 생각하면 된다. 보통 줄을 서는 것은 뒤에 서지만, 줄 밖으로 나가는 순서는 앞사람 부터이다. 이처럼 큐(Queue)는 가장 맨 처음 들어간 원소(데이터)가 가장 먼저 빠진다는 것이 특징이다.
큐 연산
- push() : 큐에 원소(데이터)를 넣는다.
- pop() : 큐의 가장 앞에 있는 원소(데이터)를 꺼낸다.
- top() : 큐의 가장 앞에 있는 원소(데이터) <-peek()
- empty() : 큐가 비어있는지에 대한 확인
- size() : 큐에 들어있는 원소(데이터)의 갯수
'Study' 카테고리의 다른 글
DFS ( 깊이 우선 탐색 ) (0) | 2020.05.22 |
---|---|
다이나믹 프로그래밍(Dynamic Programming) (0) | 2020.05.01 |
댓글