[자료구조] 큐(queue) (파이썬 / python)

이태권 (Taekwon Lee)·2023년 2월 13일
1

[자료구조] 이론

목록 보기
4/4
post-thumbnail

출처: Unsplash


큐(Queue)

📌 목차

  1. 정의
  2. 특징
  3. 구현
    a. 코드
    b. 테스트
    c. 결과

📌 정의

사전

큐(queue)를 영어사전에서 찾아 보면 "(무엇을 기다리는 사람, 자동차 등의) 줄"이라는 뜻을 가진 단어이다.

자료구조

Queue is a linear data structure that accomplished by inserting at one end (the rear) and deleting from the other (the front).
큐는 한쪽 끝(뒤)에 삽입하고 다른 쪽 끝(앞)에서 삭제가 이루어지는 선형 자료 구조입니다.

📌 특징

선입선출(FIFO, First In First Out)

  • 앞선 정의에서 "한쪽 끝(뒤)에 삽입하고 다른 쪽 끝(앞)에서 삭제가 이루어지는" 특징을 선입선출(FIFO)이라 한다.
  • 삽입은 Enqueue, 제거는 Dequeue라 일컫는다.

[!] 다크모드를 해제해야 아래의 이미지가 보입니다.
data structure, queue

출처: Wikipedia

📌 구현

  • 자료구조 스택(stack)과 마찬가지로 파이썬의 기본 자료형인 리스트(list)를 통해 쉽게 구현할 수 있다.
  • enqueue는 insert() 메서드로 리스트의 맨 앞 인덱스에 원하는 데이터를 추가한다.
  • dequeue는 pop() 메서드로 맨 뒤 인덱스에 위치한 데이터를 삭제한다.

코드

class Queue:
    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.insert(0, item)

    def dequeue(self):
        self.items.pop()

    def size(self):
        return len(self.items)

    def is_empty(self):
        return not self.items

    def __str__(self):
        return f"{self.items}"

테스트

if __name__ == "__main__":
    queue = Queue()
    print(f"queue : {queue}")
    print(f"size of queue : {queue.size()}")
    print(f"is queue empty? : {queue.is_empty()}")
    print()

    queue.enqueue(1)
    print(f"enqueue 1 : {queue}")
    queue.enqueue(7)
    print(f"enqueue 7 : {queue}")
    queue.enqueue(4)
    print(f"enqueue 4 : {queue}")
    print(f"size of queue : {queue.size()}")
    print(f"is queue empty? : {queue.is_empty()}")
    print()

    queue.dequeue()
    print(f"dequeue : {queue}")
    print(f"size of queue : {queue.size()}")
    queue.dequeue()
    print(f"dequeue : {queue}")
    print(f"size of queue : {queue.size()}")
    queue.dequeue()
    print(f"dequeue : {queue}")
    print(f"size of queue : {queue.size()}")
    print(f"is queue empty? : {queue.is_empty()}")

결과

queue : []
size of queue : 0
is queue empty? : True

enqueue 1 : [1]
enqueue 7 : [7, 1]
enqueue 4 : [4, 7, 1]
size of queue : 3
is queue empty? : False

dequeue : [4, 7]
size of queue : 2
dequeue : [4]
size of queue : 1
dequeue : []
size of queue : 0
is queue empty? : True
profile
(Backend Dev.) One step at a time

2개의 댓글

comment-user-thumbnail
2023년 2월 16일

블로그 잘봤습니다!! 화이팅 👍👍

1개의 답글