상세 컨텐츠

본문 제목

Queue 기초

똑똑한 개발/Algorithm 과 Data Structure

by 성댕쓰 2021. 8. 3. 21:10

본문

Queue를 이해하기 위해 stack을 알아야한다.

stack은 FILO이다.

Queue는 FIFO이다.

 

데이터를 Queue에 넣는 행동 enqueue 빼는 행동 dequeue이다.

enqueue, dequeue모두 O(n) time complexity를 갖는다.

 

이를 구현하기 위해 doubly linked list를 사용하면된다.(LRU cache 참고)

 

# FIFO policy Queue를 implementation 하여라

# 함수 : enqueue() dequeue()

class QueueNode:
    def __init__(self, val:int) -> None:
        self.val = val
        self.left = None
        self.right = None
        
class Queue:
    def __init__(self) -> None:
        self.head = QueueNode(0)
        self.tail = QueueNode(0)
        self.head.right = self.tail
        self.tail.left = self.head

    def enqueue(self, val:int)->None:
        new_node = QueueNode(val)
        last_node = self.tail.left

        last_node.right = new_node
        new_node.left = last_node

        new_node.right = self.tail
        self.tail.left = new_node

    def dequeue(self) -> int:
        first_node = self.head.right
        if first_node == self.tail:
            raise RuntimeError('No Elem')

        value = first_node.val
        second_node = first_node.right
        self.head.right = second_node
        second_node.left = self.head

        return value

queue = Queue()
queue.enqueue(1)
queue.enqueue(3)
queue.enqueue(5)
queue.enqueue(7)
queue.enqueue(9)

print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())

 

참조 : (3) 코딩테스트, 기초, Queue 소개 - YouTube

'똑똑한 개발 > Algorithm 과 Data Structure' 카테고리의 다른 글

Hash Table 만들기  (0) 2022.01.03
Queue(Circular Queue)  (0) 2021.08.05
링크드 리스트(LRU cache)  (0) 2021.08.02
링크드 리스트(리스트 중간지점 찾기)  (0) 2021.07.29
Merge Sort  (0) 2021.07.29

관련글 더보기

댓글 영역