[알고리즘] 스택과 큐

2025. 3. 16. 18:48·알고리즘

스택

  • 스택의 어원: ‘쌓는다’
  • 선입후출 or FILO(First In Last Out): 먼저 들어간 것이 마지막에 나오는 규칙
  • 스택에 삽입하는 연산은 푸시, 꺼내는 연산은 팝
  • 파이썬의 경우 직접적으로 스택을 제공하진 않지만 대안으로 리스트에 append()메서드와 push()메서드로 스택을 대체할 수 있다.
  • 덱(deque)은 양쪽에서 데이터를 삽입하거나 삭제할 수 있는 자료구조다. 이런 특징을 응용하면 한쪽으로만 동작하는 스택처럼 사용할 수 있다.
  • 스택의 ADT
    • 푸시(push): 데이터 푸시
    • 팝(pop): 최근에 푸시한 데이터 팝하고, 그 데이터 반환
    • 가득 찼는지 확인(isFull): 스택에 들어 있는 데이터 개수가 max size인지 boolean
    • 비었는지 확인(isEmpty): 스택에 들어 있는 데이터가 하나도 없는지 boolean
    • 탑(top): 최근에 삽입한 데이터의 위치를 저장할 변수

  • 스택의 세부 동작
    • push(): IsFull()로 가득 찼는지 확인 -> 그렇지 않다면 top을 1만큼 증가 -> top이 가리키는 위치에 추가
    • pop(): IsEmpty()로 데이터가 없는 건 아닌지 확인 -> 데이터가 있다면 top을 1만큼 감소시키고 마지막으로 삽입한 데이터 반환, 실제 배열에 데이터가 남아있어도 top이 -1이라면 스택은 빈 것으로 본다.
    • 파이썬의 경우 위의 세부 동작을 일일히 구현하는 함수를 만들 필요는 없고 기존의 append(), pop() 메서드를 사용하며, 크기를 구하는 경우 len()을 사용하면 된다.

 

큐

  • 큐는 ‘줄을 서다’라는 뜻.
  • 선입선출 or FIFO(First In First Out)
  • 큐에 삽입하는 연산은 푸시, 꺼내는 연산은 팝
  • 큐의 ADT
    • 푸시(push): 데이터 푸시
    • 팝(pop): 큐의 가장 앞에 위치한 데이터 팝하고, 그 데이터 반환
    • 가득 찼는지 확인(isFull): 스택에 들어 있는 데이터 개수가 max size인지 boolean
    • 비었는지 확인(isEmpty): 스택에 들어 있는 데이터가 하나도 없는지 boolean (front == rear인지)
    • front: 큐의 앞을 의미하며, 가장 마지막에 팝한 위치를 기록한다.
    • rear: 큐의 뒤를 의미하며, 가장 최근에 푸시한 데이터의 위치를 기록한다.
  • 큐는 front의 다음부터 rear까지를 큐가 관리하는 데이터로 생각한다. pop을 할 때마다 front의 값이 하나씩 증가를 하고 그 위치를 기점으로 데이터를 관리하므로 메모리 공간이 낭비된다. 그런데 파이썬의 경우 리스트의 길이를 자동으로 관리하므로 메모리 효율을 위해 원형 큐 같은 것을 굳이 쓸 필요는 없다.
  • 큐를 구현하기 위해 리스트를 활용할 수도 있고, 덱을 활용할 수도 있는데 덱의 성능이 월등하므로 덱을 이용하는 것이 좋다. 대표적으로 리스트의 pop(0)과 덱의 popleft()를 비교하면 알 수 있다.

'알고리즘' 카테고리의 다른 글

[알고리즘] 해시  (0) 2025.04.30
[알고리즘] 배열  (0) 2025.03.04
[코딩테스트] 파이썬의 기본 자료형  (0) 2025.02.25
[코딩테스트] 알고리즘 문제풀이 전략  (0) 2025.02.25
[알고리즘 문제] 하샤드 수  (1) 2022.11.23
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 해시
  • [알고리즘] 배열
  • [코딩테스트] 파이썬의 기본 자료형
  • [코딩테스트] 알고리즘 문제풀이 전략
youjeong_choi
youjeong_choi
  • youjeong_choi
    youjeong
    youjeong_choi
  • 전체
    오늘
    어제
    • 분류 전체보기 (101)
      • HTML, CSS (7)
      • JavaScript (19)
        • 모던 자바스크립트 딥다이브 (4)
      • ReactJS (17)
      • TIL (15)
      • WIL (17)
      • 알고리즘 (17)
      • 네트워크 (5)
      • Vue (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    항해99
    혼공스
    항해99주특기
    리액트 라우트
    익명 함수
    모던자바스크립트딥다이브
    자바스크립트
    피니아
    리액트
    항해99주특기리액트
    파이썬
    항해99리액트숙련주차
    항해99 실전프로젝트
    알고리즘 문제
    알고리즘
    선언적 함수
    항해99리액트
    무한렌더링
    리액트 라이프 사이클
    항해99 주특기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
youjeong_choi
[알고리즘] 스택과 큐
상단으로

티스토리툴바