파이썬의 자료구조 - 스택과 큐

스택과 큐에 대한 내용을 다뤘는데, 파이썬을 활용하여 구현해보겠다.
다시 상기하자면 스택은 LIFO(Last In, First Out), 큐는 FIFO(First In, First Out)이라고 한다.
즉, 데이터를 쌓아서 어떻게 출력할 것인가에 대한 자료구조이다.

파이썬과 큐(Queue)

서두에서 설명했지만 가장 먼저 입력 된 데이터가 가장 먼저 출력되는 구조이다.
FIFO(First In, First Out)라고 부르기도 하며 반대로 LILO(Last In, Last Out)이라고 설명하기도 한다.
여기서 사용하는 용어가 있는데 Enqueue(인큐), Dequeue(디큐)이다.

  • Enqueue : 큐에서 데이터를 입력하는 기능
  • Dequeue : 큐에서 데이터를 꺼내는 기능

추가로 파이썬에서는 queue라는 내장 모듈을 제공하는데, 아래의 그림을 통해 코드를 작성해보았다.
여기서 put( )은 큐에 데이터를 넣을 때 사용하는 메서드, get( )은 큐에서 데이터를 꺼내는 메서드이다.

image

import queue

#큐 모듈의 큐 클래스 객체 선언
data = queue.Queue()
print(type(data))

#선언 된 큐 객체에 3개 데이터 입력하기 : 2,5,8
data.put(2)
data.put(5)
data.put(8)

#큐 객체에서 입력된 객체 하나씩 꺼내기 :FIFO
print(data.get())
print(data.get())
print(data.get())

[결과]

<class 'queue.Queue'>
2
5
8

숫자 2,5,8을 순서대로 넣고 get( )을 3번 하면 먼저 입력 된 순서대로 출력된다.

queue 내장 모듈 내에는 기본적인 Queue( ) 클래스 외에도 LifoQueue( ), PriorityQueue( ) 클래스가 존재한다.
LifoQueue( )는 스택과 같은 LIFO 구조, PriorityQueue( ) 는 사용자가 우선순위를 지정한대로 데이터를 꺼낼 수 있는 구조라고 보면 될 것 같다.

파이썬과 스택(Stack)

스택은 나중에 입력 된 데이터가 먼저 출력되는 LIFO(Last In, First Out) 자료 구조이다. 반대로 FILO(First In, Last Out)라고 부르기도 한다.
스택에서는 Push, Pop이라는 용어가 있다.

  • Push : 데이터를 입력하기
  • Pop : 데이터를 꺼내기(마지막으로 입력 된 순서부터)

image

해당 그림을 파이썬으로 구현하려면 리스트를 선언해 append를 통해 데이터를 넣고,(=Push) 꺼낼 때는 리스트의 pop( ) 함수를 사용하면 된다.

#빈 리스트 선언
stack = []

#2,5,8 차례대로 리스트에 추가하기(=Push)
stack.append(2)
stack.append(5)
stack.append(8)

#값이 모두 입력된 리스트 출력하기
print("stack : ", stack)

#리스트 pop함수 통해 마지막으로 입력된 데이터 순 출력
print("첫번째 pop")
print(stack.pop())
print(stack)

print("두번째 pop")
print(stack.pop())
print(stack)

print("세번째 pop")
print(stack.pop())
print(stack)

[결과]

stack :  [2, 5, 8]

첫번째 pop
8
[2, 5]

두번째 pop
5
[2]

세번째 pop
2
[]

해당 결과를 통해 pop( ) 한번 실행할 때마다 리스트의 마지막 요소가 출력되고 없어지는 것을 확인할 수 있다.

Categories:

Updated:

Comments