컴퓨터공학의 기초가 되는 cs지식을 되새기면서 이 후 있을 기술면접을 대비 하고자한다.
스택(Stack)은 "쌓다"라는 의미로 데이터를 쌓아 올린 형태의 자료구조 또한 제한적으로 접근할 수 있는 나열구조의 자료구조이다. 접근 방법은 언제나 목록 끝에서만 일어난다. 끝먼저내기 목록(Pushdown lise)라고도 한다.
그림과 같이 꺼내지는 자료는 가장 최근에 push한 자료터 나오게 된다. 이러한 구조를 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형구조(LIFO - Last In First Out)로 되어 있다.
스택에 연산은 아래와 같다.
재귀 알고리즘을 사용하는 경우 스택이 유용하다
후위 표기법이란? : 피연산자를 먼저 표시하고 연산자를 나중에 표시하는 방법
컴파일러가 사용하는 것
큐(Queue)는 컴퓨터 과학 분야에서 쓰이는 컴퓨터의 기본적인 자료 구조의 한가지로, 먼저 집어넣은 데이터가 먼저나오는 선입선출(FIFO)구조로 저장하는 형식을 말한다.
선형 큐는 Front와 rear의 값이 계속 증가만 하기 때문에 언젠가는 배열에 끝에 도달하게 되고 배열의 앞부분이 비어있더라도 더 이상 삽입하지 못한다는 단점이 있다, 따라서 후단에 더 이상 삽입할 공간이 없으면 모든 요소들을 왼쪽으로 이동시켜야한다. 하지만 매번 이동시키려면 상강한 시간이 걸리고 또한 복잡도는 높아진다
즉, 막대 모양으로 된 큐이다. 크기가 제한되어 있고, 빈 공간을 사용하려면 모든 자료를 꺼내거나 자료를 한 칸씩 옮겨야 한다는 단점이 있다.
선형 큐의 문제점을 보완한 것이 환형 큐이다. Front가 큐의 끝에 닿으면 큐의 맨앞으로 자료를 보내어 원형으로 연결하는 방식이다.
데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용한다.
덱(Deque)이란, Double Ended Queue의 준말로 양쪽에서 삽입과 삭제가 가능한 구조이며 스택과 큐의 연산을 모두 지원한다.
Scroll: 입력 제한 덱 (입력이 한쪽에서만 발생하고, 출력은 양쪽에서 일어날 수 있음)
Shelf: 출력 제한 덱 (입력은 양쪽에서 일어나고, 출력은 한쪽에서 일어나도록 제한)
덱의 연산은 collections 모듈에서 제공하는 deque 클래스로 구현 가능하다.
append(): 오른쪽에서 데이터를 삽입
appendleft(): 왼쪽에서 데이터를 삽입
pop(): 오른쪽에서 데이터 삭제
popleft(): 왼쪽에서 데이터 삭제
References (참고 자료)