[CS기초] 스택(Stack), 큐(Queue)

2025. 3. 26. 13:12·크래프톤 정글/CS기초(키워드, 개념정리)

스택(Stack)

스택 개요

스택(Stack)은 한쪽 끝에서만 데이터를 넣고 뺄 수 있는 자료구조이다.

 

 

 

스택의 특징

  • 먼저 들어온 데이터가 가장 늦게 나갈 수 있는 FILO(선입후출) 구조이다
  • 무조건 최상단(맨 뒤)에 요소를 넣고 빼야 하기 때문에 요소를 추가하거나 제거하는 데 O(1)의 시간이 걸린다
  • 최상단(맨 뒤)의 요소를 확인하는 데 O(1)의 시간이 걸린다.
    • 원칙적으로는 최상단(맨 뒤)의 요소만 확인이 가능하다
    • 다만, 배열로 스택을 구현하면 스택 중간의 원소도 확인 가능하게 구현이 가능하다

 

파이썬에서 스택의 구현

파이썬에서는 단순 배열로 스택을 구현해 사용한다.

# 배열로 스택 자료구조를 구현해 사용
stack = []

# push: 스택 최상단에 요소 추가
stack.append(28)

# pop: 스택 최상단에서 요소 제거(및 활용)
# 단, 스택이 비어있을 경우 IndexError가 발생하므로 주의
number = stack.pop()

# size: 스택에 들어있는 요소의 개수 확인
stack_size = len(stack)

# empty: 스택이 비어있는지 여부 확인
# 스택에 아무 요소도 없다면 False, 하나라도 있다면 True를 반환.
# 이를 이용해 스택이 비어있을 경우에 대한 처리가 가능
if stack:
    print("스택에 요소가 있습니다.")
else:
    print("스택에 요소가 없습니다.")
    
# top: 스택 최상단의 정수 확인
# 단, 스택이 비어있을 경우 IndexError가 발생하므로 주의
top_element = stack[-1]

 

 

 

큐(Queue)

큐 개요

큐(Queue)는 한쪽 끝에서 데이터를 넣고 다른쪽 끝에서 데이터를 뺄 수 있는 자료구조이다.

 

큐의 특징

  • 먼저 들어온 데이터가 가장 먼저 처리되는 FIFO(선입선출) 구조이다
  • 무조건 맨 뒤에 요소를 넣고 맨 앞에서 빼기 때문에 요소를 추가하거나 제거하는 데 O(1)의 시간이 걸린다
  • 맨 앞(또는 맨 뒤)의 요소를 확인하는 데 O(1)의 시간이 걸린다
    • 원칙적으로 맨 앞(또는 맨 뒤)의 요소만 확인이 가능하다

 

파이썬에서 큐의 구현

파이썬에서는 표준 라이브러리의 Collections 모듈 안에 있는 deque 클래스를 이용한다. 원래는 양쪽 끝에서 삽입과 삭제가 모두  가능한 덱을 구현한 클래스이지만, 위에서 배열로 스택을 구현하듯이 큐 또한 deque 클래스로 구현해 사용한다.

# Collections.deque 모듈로 큐를 구현해 사용
from collections import deque
q = deque()

# push: 큐에 요소 추가
q.append(28)

# pop: 큐의 가장 앞에 있는 정수를 제거(및 활용)
# 단, 큐가 비어있을 경우 IndexError가 발생하므로 주의
number = q.popleft()

# size: 큐에 들어있는 요소의 개수 확인
q_size = len(q)

# empty: 큐가 비어있는지 여부 확인
# 큐에 아무 요소도 없다면 False, 하나라도 있다면 True를 반환. 이를 이용해 큐가 비어있을 경우에 대한 처리가 가능
if q:
    print("큐에 요소가 있습니다.")
else:
    print("큐에 요소가 없습니다.")
    
# front: 큐의 가장 앞에 있는 정수 확인
# 단, 큐가 비어있을 경우 IndexError가 발생하므로 주의
front_element = q[0]

# back: 큐의 가장 뒤에 있는 정수 확인
# 단, 큐가 비어있을 경우 IndexError가 발생하므로 주의
back_element = q[-1]
저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > CS기초(키워드, 개념정리)' 카테고리의 다른 글

[CS기초] 연결 리스트(Linked List)  (0) 2025.03.26
[CS기초] 우선순위 큐(Priority Queue)  (0) 2025.03.26
[중간정리] 2주차 - 해시 충돌과 체이닝, 병합 정렬, 큐, 캐시 메모리, 프로세스/스레드  (0) 2025.03.25
[CS기초] 분할 정복(Divide and Conquer)  (0) 2025.03.25
[CS기초] 이분 탐색(Binary Search)  (0) 2025.03.25
'크래프톤 정글/CS기초(키워드, 개념정리)' 카테고리의 다른 글
  • [CS기초] 연결 리스트(Linked List)
  • [CS기초] 우선순위 큐(Priority Queue)
  • [중간정리] 2주차 - 해시 충돌과 체이닝, 병합 정렬, 큐, 캐시 메모리, 프로세스/스레드
  • [CS기초] 분할 정복(Divide and Conquer)
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기
      • 크래프톤 정글
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무)
        • 마이 정글(WIL, 에세이)
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CS기초] 스택(Stack), 큐(Queue)
상단으로

티스토리툴바