1. Stack이란?
스택은 컴퓨터 과학의 자료구조 중 하나로, 항목에 접근하거나 항목을 추가하거나 삭제하는 동작이 데이터의 끝에서만 일어나는 ‘후입선출’(LIFO, Last In First Out) 방식을 따른다. 스택의 가장 큰 특징은 마지막에 들어간 데이터가 가장 먼저 나오는 구조를 가지고 있다는 점이다. 이는 실생활에서 책을 쌓았다가 위에서부터 하나씩 가져가는 것과 비슷한 원리라고 생각하면 좋다.
특징
- 후입선출(LIFO) 방식 : 가장 최근에 추가된 데이터가 먼저 나온다.
- Push : 스택의 맨 위에 새로운 요소를 추가해준다.
- Pop : 스택의 맨 위에 있는 요소를 제거하고 반환한다.
- Top : 스택의 가장 위를 가르킨다. 이를 통해 스택의 가장 최근 데이터에 접근할 수 있다.
이 외에도 peek 또는 top 연산을 통해 스택의 맨 위의 요소를 확인하는 등의 작업이 가능하다.
스택은 컴퓨터 프로그램에서 함수 호출, 메모리 관리, 알고리즘 등 다양한 곳에서 활용되고 있다. 이러한 특성으로 인해서 스택은 프로그래밍과 알고리즘에 있어서 매우 중요한 자료구조로 여겨진다고 한다.
장점
- 자료의 추가와 삭제가 상대적으로 간단하다. Top에 있는 항목에 대해 연산이 진행되기 때문에 복잡한 탐색이나 이동이 필요 없다.
- 함수 호출, 실행 취소, 후위 표기법 등 다양한 컴퓨터 과학의 문제를 해결하는 데 사용된다.
단점
- 스택의 크기가 고정되어 있을 경우, 스택 오버플로우(Stack Overflow)가 발생할 수 있다. 즉, 스택의 공간이 부족하게 되면 더 이상 데이터를 추가할 수 없게 된다.
- 스택 내의 데이터에 접근하기 위해서는 Top에서부터 하나씩 데이터를 Pop해야 한다. 이는 스택 내부에 있는 데이터를 탐색하는 데 시간이 오래 걸리게 만든다.
스택의 이러한 특성들을 잘 이해하고, 사용 목적과 상황에 따라 적절하게 활용할 수 있어야 한다.
2. Queue란?
큐는 컴퓨터 과학에서 사용하는 자료구조 중 하나로, '선입선출'(FIFO, First In First Out)의 특성을 가지고 있다. 큐의 이름처럼 실생활에서 줄을 서는 것과 비슷한 원리를 가지고 있다. 즉, 먼저 들어온 데이터가 먼저 나가고, 나중에 들어온 데이터는 나중에 나가게 된다.
특징
- 선입선출(FIFO) 방식 : 가장 먼저 들어간 데이터가 가장 먼저 나온다.
- Enqueue와 Dequeue 연산 : 데이터를 추가하거나 제거하는 데 사용되는 두 가지 주요 연산이 있다.
- Front와 Rear : 큐의 앞과 뒤를 가리킨다. 이를 통해 큐의 가장 오래된 데이터와 가장 최근 데이터에 접근 할 수 있다.
장점
- 자료의 추가와 삭제가 상대적으로 간단하다. Front와 Rear에 있는 항목에 대해 연산이 진행되기 때문에 복잡한 탐색이나 이동이 필요 없다.
- 너비 우선 탐색, 버퍼, 캐시 등 다양한 컴퓨터 과학의 문제를 해결하는 데 사용된다.
단점
- 큐의 크기가 고정되어 있을 경우, 큐 오버플로우(Queue Overflow)가 발생할 수 있다. 즉, 큐의 공간이 부족하게 되면 더 이상 데이터를 추가할 수 없게 된다.
- 큐가 포화 상태가 아님에도 불구하고, 큐의 앞부분에 빈 공간이 있어도 신규 데이터를 추가할 수 없는 문제가 있다. 이를 해결하기 위해 원형 큐(Circular Queue)등의 개념이 도입되었다.
3. 스택과 큐의 차이
스택과 큐의 가장 큰 차이점은 데이터의 입출구가 어떻게 동작하는지, 즉 데이터의 추가와 삭제가 어떤 순서로 이루어지는지에 있다. 스택은 가장 나중에 들어온 데이터가 가장 먼저 나가는 반면, 큐는 가장 먼저 들어온 데이터가 가장 먼저 나가는 구조를 가지고 있다. 이러한 차이 때문에 두 자료구조는 각기 다른 상황과 문제에 적합하게 선택해서 사용할 수 있어야만 한다고 한다.
스택의 경우 컴퓨터에서 실행되는 함수의 호출 스택, 웹 브라우저의 뒤로 가기 기능 등이 있고, 큐의 경우 프린터의 인쇄 대기열, 운영체제의 프로세스 스케줄링 등이 있다고 한다.
'Knowledge > CS & HTTP' 카테고리의 다른 글
CI/CD 그게 뭔데요...? (1) | 2024.01.08 |
---|---|
RESTful API가 뭔데요 (0) | 2024.01.05 |
쿠키와 세션 (0) | 2023.12.27 |
인터넷 통신이란? (1) | 2023.12.18 |
배열(Array) (0) | 2023.12.16 |
쓰임 있는 사람이 되기 위해 노력 중입니다.