CS/자료구조

[자료구조] 스택, 큐, 덱(Stack, Queue, Dequeue)

2021. 2. 15. 00:32
목차
  1. 스택, 큐, 덱이란?
  2. 스택(Stack): LIFO - 후입선출
  3.  
  4. 큐(Queue): FIFO - 선입선출
  5.  
  6. 덱(Dequeue): Stack + Queue
  7. 참고

스택, 큐, 덱이란?

  • 데이터 값을 저장하는 기본적인 구조로 일차원의 선형(linear) 자료구조이다.
  • (배열/리스트와 유사하게) 값을 저장(insert 또는 set)하는 연산과 저장된 값을 꺼내는(remove 또는 get) 연산이 제공된다. 그러나 매우 제한적인 규칙(LIFO, FIFO)등을 따른다.

 

스택(Stack): LIFO - 후입선출

  • 스택은 가장 최근에 저장된 값 다음에 저장되며, 가장 최근에 저장된 값이 먼저 나간다. - LIFO(Last In First Out) 원칙
  • 파이썬은 스택 자료형을 별도로 제공하지는 않지만, 리스트가 사실상 스택의 모든 연산을 지원한다.

https://medium.com/@1991dharapatel/javascript-stacks-and-queues-136fabab8359

class Stack:
	def __init__(self):
		self.items = []	# 데이터 저장을 위한 리스트 준비
	def push(self, val):
		self.items.append(val)
	def pop(self):
		try:	# pop할 아이템이 없으면
			return self.items.pop()
		except IndexError:	# indexError 발생
			print("Stack is empty")
	def top(self):
		try:
			return self.items[-1]
		except IndexError:
			print("Stack is empty")
	def __len__(self):	# len()로 호출하면 stack의 item 수 반환
 		return len(self.items)
	def isEmpty(self):
		return self.__len__() == 0

 

큐(Queue): FIFO - 선입선출

  • 큐는 스택과 동일하게 가장 최근에 저장된 값 다음에 새로운 값이 저장되지만 가장 오래전에 저장된 값부터 나간다는 차이가 있다. - FIFO(First In First Out, 선착순) 원칙
  • 스택과 마찬가지로 리스트는 큐의 모든 연산을 지원하지만, 리스트는 동적 배열로 구현되어 큐의 연산을 수행하기엔 효율적이지 않다. 따라서 파이썬에서 큐를 구현할 땐 후술할 덱을 사용한다.

https://medium.com/@1991dharapatel/javascript-stacks-and-queues-136fabab8359

class Queue:
    def __init__(self):
        self.items = []
    def enqueue(self,val):
        self.items.append(val)
    def dequeue(self):
        try:
            return self.items.pop(0)
        except IndexError:
            print("Queue is empty")
    def front(self):
        try:
            return self.items[0]
        except IndexError:
            print("Queue is empty")
    def __len__(self):
        return len(self.items)
    def isEmpty(self):
        return len(self)

 

덱(Dequeue): Stack + Queue

  • 덱은 스택과 큐의 연산을 모두 지원하는 자료구조이다.
  • 왼쪽과 오른쪽에서 모두 삽입과 삭제가 가능한 큐다.
  • 파이썬에선 collections라는 모듈에 deque란 클래스로 덱이 이미 구현되어 있다.

deque class
https://commons.wikimedia.org/wiki/File:Deque.gif

참고

Data Structures with Python(신찬수 저)

파이썬 알고리즘 인터뷰(박상길 저)

 

저작자표시 비영리 (새창열림)

'CS > 자료구조' 카테고리의 다른 글

[자료구조] 배열, 리스트(Array, List)  (0) 2021.02.07
  1. 스택, 큐, 덱이란?
  2. 스택(Stack): LIFO - 후입선출
  3.  
  4. 큐(Queue): FIFO - 선입선출
  5.  
  6. 덱(Dequeue): Stack + Queue
  7. 참고
'CS/자료구조' 카테고리의 다른 글
  • [자료구조] 배열, 리스트(Array, List)
코택
코택
코택
TaxFree
코택
전체
오늘
어제
  • 분류 전체보기 (369)
    • Spring (29)
      • Spring (18)
      • 스프링 핵심 원리 - 고급편 (11)
    • Spring Batch (4)
    • JPA (4)
    • CS (89)
      • 자료구조 (2)
      • 네트워크 (5)
      • 운영체제 (1)
      • 데이터베이스 (4)
      • SQL (7)
      • 알고리즘 이론 (4)
      • 알고리즘 문제 풀이 (66)
    • 웹 (28)
      • React.js (4)
      • Next.js (1)
      • Node.js (14)
      • FastAPI (4)
      • Django (5)
    • 프로그래밍 언어 (45)
      • Python (5)
      • Java + Kotlin (29)
      • JavaScript + TypeScript (11)
    • 테스트코드 (26)
      • ATDD, 클린 코드 with Spring (4)
      • 이규원의 현실 세상의 TDD: 안정감을 주는 코드.. (20)
    • 인프라 (6)
      • AWS (2)
      • Kubernetes (4)
    • 트러블슈팅 (25)
    • 책 (89)
      • Effective Java (54)
      • Effective Kotlin (14)
      • 도메인 주도 개발 시작하기: DDD 핵심 개념 정.. (11)
      • 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술 (6)
      • 도메인 주도 설계 첫걸음 (4)
    • Git (10)
    • 회고 (5)
    • etc (8)

블로그 메뉴

  • 홈
  • 방명록
  • 관리
  • GitHub
  • LinkedIn

공지사항

  • 스킨 관련

인기 글

태그

  • 파이썬
  • fastapi
  • Shortest Path
  • BOJ
  • 그래프
  • Git
  • 깊이 우선 탐색
  • dp
  • 장고
  • 백준
  • http
  • mysql
  • 브루트포스
  • 그래프 탐색
  • atdd

최근 댓글

최근 글

hELLO · Designed By 정상우.
코택
[자료구조] 스택, 큐, 덱(Stack, Queue, Dequeue)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.