[파이썬] collections 라이브러리를 이용해 스택 큐 구현

2023. 2. 20. 16:52Python

collections 라이브러리는 자료구조를 제공하는 표준 라이브러리다.

deque를 이용해 스택과 큐를 구현해 볼 것이다!!

 

스택 (stack)

스택은 데이터를 저장하는 선형 자료구조로, Last-In_First-out 방식으로 동작을하며 스택은 push(데이터 추가)와 pop(데이터 제거) 두가지 방식을 기본적으로 제공한다. 가장 마지막에 들어온 데이터가 가장 먼저 빠져나가는 방식이다. 

라이브러리를 이용하면 이렇게 쉽게 구현이 가능하다.

from collections import deque

stack = deque()

# 데이터 추가
stack.append(1)
stack.append(2)
stack.append(3)

# 데이터 삭제
print(stack.pop()) # 3 
print(stack.pop()) # 2
print(stack.pop()) # 1

하지만 단순히 코딩 테스트를 위한 구현이면 위에 방식을 이용해도 되지만 우리는 기본적인 구현 방법에 대해도 알아야 된다고 생각한다.

라이브러리를 이용하지 않고 구현 해보겠다.

 

class Stack:
	
    def __init__(self):
    	self.items = []
        
    # items 값이 비어있는지 아닌지를 검사하는 함수이다. 값이 없다면 true를 있다면 false를 반환한다
    def is_empty(self):
    	return len(self.items) == 0
        
	def push(self, item):
    	self.items.append(item)
        
	def pop(self, item):
    	# null Check
        if self.is_empty():
        	return None
        else:
        	return self.items.pop()
            
    # items 길이를 구한다.        
	def size(self):
    	return len(self.items)
        
    # 현재 item에 들어있는 값들을 보여준다.
    def print_stack(self):
    	print(self.items)
        
        
stack = Stack()

stack.push(1)
stack.push(2)
stack.push(3)

stack.pop()

print(stack.print_stack())

 

큐 (Queue)

큐는 스택과 마찬가지고 선형 자료구조로, 스택과 다르게 First-In-Fisrt-out 방식으로 동작을 하며 큐는 enqueue(데이터 추가)와 dequeue(데이터 삭제) 두가지 방식을 제공한다. 가장 처음 들어온 값이 가장 먼저 빠져나가는 방식이다.

 

from collections import deque

queue = deque()

# 데이터 추가
queue.append(1)
queue.append(2)
queue.append(3)

# 데이터 삭제
print(queue.popleft())  # 1
print(queue.popleft())  # 2
print(queue.popleft())  # 3

popleft를 사용해야 왼쪽에 있는 값을 빼내간다.

 

이것도 라이브러리 없이 구현해보겠다.

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

    def is_empty(self):
      return len(self.items) == 0

    def enqueue(self, item):
      self.items.append(item)

    def dequeue(self):
      if self.is_empty():
        return None
      else:  
        return self.items.pop(0)

    def print_queue(self):
      print(self.items)
      
      
queue = Queue()

queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
queue.dequeue()

print(queue.print_queue())