Search

스택, 큐, 힙 (자료구조)

대분류
CS
소분류
알고리즘
유형
자료구조
HTTP
부유형
스택
최종 편집 일시
2024/10/27 15:34
생성 일시
2024/07/11 00:55
14 more properties

스택

쌓아올리는 것
밑에는 막혀있는 컵 구조
같은 구조와 크기의 자료를 정해진 방향으로 쌓을 수 있다.

구조 & 연산

후입선출(LIFO:Last In, First Out), 선입후출(FILO:First In Last Out) 구조
나중에 넣은 걸 먼저 뺀다. 먼저 넣은 건 나중에 뺀다.
연산 방식
삭제 (pop()) : 스택에서 가장 위에 있는 항목을 제거한다. [O(1)]
삽입 (push(item)) : item 하나를 스택의 가장 윗부분에 추가한다. [O(1)]
읽기 (peek()) : 스택의 가장 위에 있는 항목을 반환한다. [O(1)]

특징

데이터를 저장하고 검색하는 프로세스가 매우 빠름
후입선출 구조로 데이터를 조회할 때 최상위 블록(Top)만 확인하면 되기 때문
데이터는 하나씩 넣고 뺄 수 있음
하나의 입출력 방향을 가지는 제한적 접근 형태
저장되는 데이터는 유한하고 정적 → 스택의 크기는 제한적

활용

웹 브라우저 방문기록 (뒤로 가기) : 가장 나중에 열린 페이지부터 다시 보여준다.
역순 문자열 만들기 : 가장 나중에 입력된 문자부터 출력한다.
실행 취소 (undo) : 가장 나중에 실행된 것부터 실행을 취소한다.
후위 표기법 계산
재귀함수

오버플로우 & 언더플로우

오버플로우 : 스택이 모두 차서 데이터가 더 이상 못 들어가는 현상
언더플로우 : 스택이 비어있을 때 데이터를 꺼내려 하여 발생하는 현 상

쌓아올리는 것
밑에는 막혀있는 컵 구조
같은 구조와 크기의 자료를 정해진 방향으로 쌓을 수 있다.

구조 & 연산

선입선출(FIFO:First In, First Out), 후입후출(LILO:Last In Last Out) 구조
먼저 넣은 걸 먼저 뺀다. 나중에 넣은 건 나중에 뺀다.
연산 방식
Enqueue : 큐에 데이터를 넣는 것
Dequeue : 큐에서 데이터를 꺼내는 것
삽입 (Enqueue()) : 큐 맨 뒤에 어떠한 요소를 추가 [O(1)]
삭제 (Dequeue()) : 큐 맨 앞쪽의 요소를 삭제 [O(1)]
기 (peek()) : front에 위치한 데이터를 읽음 [O(n)]
삭제되는 데이터는 앞에 삽입되는 데이터는 뒤에 위치

활용

대기 번호표
물품 진열
BFS 구현
프린터 출력 처리
콜센터 고객 대기시간

특징

선입선출의 구조 덕에 데이터가 입력된 순서대로 연산을 처리할 때 사용
스택처럼 데이터는 하나씩 삽입, 방출 가능
두 개의 입출력 방향을 가지며 데이터의 입력과 출력 방향 상이

완전 이진트리의 일종
우선순위 큐를 위해 만들어진 자료구조
우선 순위 큐 - 데이터들이 우선순위를 가지고 있고, 우선순위가 높은 데이터가 먼저 방출 - CPU 작업 스케줄링, 시뮬레이션 시스템에서 사용
최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조

종류

최대 힙(max heap)
부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진트리
key(부모 노드) ≥ key(자식 노드)
최소 힙(min heap)
부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진트리
key(부모 노드) ≤ key(자식 노드)

구조 & 연산

힙을 저장하는 표준적인 자료구조는 배열이다.
중복 값을 허용한다.
반 정렬 상태를 유지한다.
연산 방식
삽입
힙에 새로운 요소가 들어오면, 일단 새로운 노드를 힙의 마지막 노드에 삽입
새로운 노드를 부모 노드들과 교환
삭제
최대 힙에서 최댓값은 루트 노드이므로 루트 노드가 삭제됨 (최대 힙에서 삭제 연산은 최대값 요소를 삭제하는 것)
삭제된 루트 노드에는 힙의 마지막 노드를 가져옴
힙을 재구성