[자료구조] Queue와 Deque, Stack

김민주·2024년 8월 13일

Data Structure

목록 보기
1/3
post-thumbnail

모두 선형 자료구조

Queue
자료구조, FIFO
구현 클래스Python : List, Queue, LifoQueue, PriorityQueue
C : Circular array
Java : LinkedList, PriorityQueue, ArrayBlockingQueue
Python'queue' 모듈에서 제공
import queue
data = queue.Queue()
JavaCollection 프레임워크의 인터페이스
import java.util.*;
Queue<Integer> que = new LinkedList<Integer>();
특징- 배열 기반: 고정 크기, 인덱스를 통해 데이터에 접근
- 연결 리스트 기반: 동적 크기 가능, 데이터 삽입과 삭제가 간편함
큐의 양끝에서 삽입·삭제가 각각 이루어짐
종류1. 선형 큐(Linear Queue) - front와 rear가 증가만 하는 방식
(front 앞쪽에 공간이 있더라도 삽입할 수 없는 경우가 발생할 수 있음)
2. 원형 큐(Circular Queue) - 선형 큐의 단점을 보완
(공백 상태와 포화 상태를 구분하기 위해 하나의 공간을 비워둠)
3. 우선순위 큐(Priority Queue) - FIFO가 아닌 우선순위가 높은 순서대로 나감 (배열 또는 리스트를 이용해 구현 가능)
ex. 시뮬레이션 시스템, 네트워크 트래픽 제어, 운영체제의 테스크 스케쥴링
장점연산 속도 빠름: 입출력 모두 O(1)
단점- 멀티스레드 환경을 위한 모듈이기 때문에 매우 느림
- 중간에 위치한 데이터에 대한 접근 불가능
용도주로 스레드 간의 통신을 위해 사용
ex. BFS

Deque
라이브러리, FIFO & LIFO
구현 클래스Python : collections.deque
Java : LinkedList, ArrayDeque
Python'collections' 모듈에서 제공
from collections import deque
q = deque()
Python에서 주요 함수append() : deque의 right end에 요소 추가
appendleft() : deque의 left end에 요소 추가
pop() : deque의 right end의 요소 삭제
popleft() : deque의 left end의 요소 삭제
Java'queue'를 상속받는 인터페이스
import java.util.*;
Deque<Integer> deq = new Linkedlist<>();
장점연산 속도 빠름 (양방향 입출력 모두 O(1))
단점탐색이 불가능(모든 데이터를 꺼내면서 진행해야함)
용도양방향 큐로 양끝에서 삽입·삭제 시 사용
ex. BFS

Stack
LIFO
구현 방법list
Pythonstack = []
top = -1
특징top이 아닌 위치의 데이터에 대한 접근, 삽입, 삭제가 모두 불가능하다.
장점연산 속도 빠름(입출력 모두 O(1))
단점탐색이 불가능(모든 데이터를 꺼내면서 진행해야함)
용도ex. DFS, 괄호 검사, 후위 연산법, 문자열 역순 출력

참고링크
[자료구조] 스택 Stack, 큐 Queue, 덱 Deque

profile
낭비하지마 네 시간은 은행🐰

0개의 댓글