스택 vs 큐

기술노트
Admin (토론 | 기여)님의 2025년 4월 17일 (목) 15:06 판 (컴퓨터 과학 용어 정리 - 스택 vs 큐 추가)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

스택 vs 큐

스택(Stack)

  • 정의: 후입선출(LIFO, Last-In-First-Out) 구조
  • 특징: 가장 마지막에 들어온 데이터가 가장 먼저 나가는 구조
  • 주요 연산:
    • push(삽입): 스택의 맨 위에 데이터 추가
    • pop(삭제): 스택의 맨 위에서 데이터 제거 및 반환
  • 활용 예:
    • 함수 호출 스택: 프로그래밍 언어의 함수 호출 관리
    • 브라우저 방문 기록: 뒤로 가기 기능
    • 실행 취소(undo) 기능: 최근 작업부터 취소
    • 괄호 검사: 표현식의 괄호 짝 맞추기
    • 깊이 우선 탐색(DFS) 구현
// Java에서 스택 구현 예시
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        
        // 데이터 삽입
        stack.push(1);
        stack.push(2);
        stack.push(3);
        
        // 데이터 조회
        System.out.println("맨 위 원소: " + stack.peek()); // 3
        
        // 데이터 삭제
        System.out.println("삭제된 원소: " + stack.pop()); // 3
        System.out.println("삭제된 원소: " + stack.pop()); // 2
        
        // 스택 크기 확인
        System.out.println("스택 크기: " + stack.size()); // 1
    }
}

큐(Queue)

  • 정의: 선입선출(FIFO, First-In-First-Out) 구조
  • 특징: 가장 먼저 들어온 데이터가 가장 먼저 나가는 구조
  • 주요 연산:
    • enqueue(삽입): 큐의 뒤쪽에 데이터 추가
    • dequeue(삭제): 큐의 앞쪽에서 데이터 제거 및 반환
  • 활용 예:
    • 프린터 대기열: 인쇄 작업 순서 관리
    • 프로세스 스케줄링: CPU 작업 순서 관리
    • 메시지 큐: 비동기 통신에서 메시지 전달
    • 너비 우선 탐색(BFS) 구현
    • 캐시 구현
// Java에서 큐 구현 예시
import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        
        // 데이터 삽입
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        
        // 데이터 조회
        System.out.println("맨 앞 원소: " + queue.peek()); // 1
        
        // 데이터 삭제
        System.out.println("삭제된 원소: " + queue.poll()); // 1
        System.out.println("삭제된 원소: " + queue.poll()); // 2
        
        // 큐 크기 확인
        System.out.println("큐 크기: " + queue.size()); // 1
    }
}

스택과 큐의 비교

특성 스택(Stack) 큐(Queue)
삽입/삭제 원칙 LIFO (후입선출) FIFO (선입선출)
삽입 위치 상단(top) 후단(rear)
삭제 위치 상단(top) 전단(front)
구현 방식 배열 또는 연결 리스트 배열, 연결 리스트, 원형 큐
시간 복잡도 삽입/삭제: O(1) 삽입/삭제: O(1)
공간 관리 고정 크기 또는 동적 확장 고정 크기, 동적 확장, 원형 구조
적합한 작업 역추적, 재귀 제거 순차 처리, 대기열 관리

변형된 자료구조

스택 변형

  • 양방향 스택: 하나의 배열에서 양 끝에서 스택 연산
  • 최소/최대 스택: 최소값 또는 최대값 추적 기능 추가
  • 브라우저 스택: 앞으로 가기/뒤로 가기 기능 구현

큐 변형

  • 우선순위 큐: 우선순위에 따라 데이터 출력 (힙으로 구현)
  • 원형 큐: 배열의 끝과 시작을 연결하여 메모리 효율 향상
  • 덱(Deque): 양쪽 끝에서 삽입/삭제 가능한 이중 종단 큐

성능 고려사항

  • 스택: 단순한 구현, 메모리 접근 지역성 우수, 동적 확장 시 오버헤드 발생 가능
  • : 배열 구현 시 데이터 이동 오버헤드 발생 가능, 연결 리스트 구현 시 추가 메모리 필요
  • 선택 기준: 문제의 특성(LIFO/FIFO), 구현 언어의 내장 자료구조, 성능 요구사항에 따라 결정

관련 항목