반응형

큐(Queue) : 가장 먼저 넣은 데이터가 가장 먼저 나오는 구조

FIFO : First in First out

 

대게 Buffer에 많이 사용됩니다. 

 

Python의 장점 중 하나는 자료구조를 힘들게 구현할 필요가 없다는 점입니다. 

 

Class형으로 Queue를 표현할 수 있지만, 저는 최대한 단순하게 가는 코딩을 좋아하기 때문에 list를 이용해서 

 

큐 구조를 사용해보겠습니다..

 

우선, 재귀함수를 이용해서 FIFO 구조를 구현하겠습니다.

 

def stack(start, end):
    if start <= end:
        print('Put :', start)
        stack(start + 1, end)

        print("Get  :", end-start)
    else:
        print("--------")


stack(start=0, end=5)

#결과
Put : 0
Put : 1
Put : 2
Put : 3
Put : 4
Put : 5
--------
Get  : 0
Get  : 1
Get  : 2
Get  : 3
Get  : 4
Get  : 5

https://coding-yoon.tistory.com/43?category=830017

 

[파이썬] 자료구조 : 재귀함수 & 스택구조 & LIFO구조

재귀함수(Recursive function) : 자기 자신을 부르는 함수 리스트(List) : 동적인 배열 (튜플(tuple) : 정적인 배열) LIFO : Last in Fisrt out 스택(stack) : 일종의 바닥이 막힌 상자 혹은 더미, 나중에 넣은 물..

coding-yoon.tistory.com

위 링크를 타 보시면 stack구조와 다른 내용은 거의 없습니다. 

 

0, 1, 2, 3, 4, 5 순으로 들어갔다면 0, 1, 2, 3, 4, 5으로 다시 나오는 구조입니다. 

 

import queue
queue_list = queue.Queue()

for i in range(10):
    queue_list.put(i)
    print("Put :", i)

print("------------------")

for i in range(10):
    print("Get :", queue_list.get())
    

# 결과
Put : 0
Put : 1
Put : 2
Put : 3
Put : 4
Put : 5
Put : 6
Put : 7
Put : 8
Put : 9
------------------
Get : 0
Get : 1
Get : 2
Get : 3
Get : 4
Get : 5
Get : 6
Get : 7
Get : 8
Get : 9

import queue를 사용하시면 간단하게 FIFO구조를 구현하실 수 있습니다. 

728x90
반응형
반응형

재귀함수(Recursive function) : 자기 자신을 부르는 함수

리스트(List) : 동적인 배열 (튜플(tuple) : 정적인 배열)

LIFO : Last in Fisrt out

 

스택(stack) : 일종의 바닥이 막힌 상자 혹은 더미, 나중에 넣은 물건은 나중에 꺼낼 수 밖에 없는 구조,

LIFO(Last In First Out) 라고도 한다.

 

스택(Stack) : 더미

재귀함수를 이용해서 이 스택구조를 구현하겠습니다. (Push는 자료를 입력, Pop은 자료를 출력)

#재귀함수를 이용한 스택구조
def stack(start , end):
    if start <= end:
        print('Push :', start)
        stack(start + 1, end)
        print("Pop  :", start)
    else:
        print("--------")

stack(0, 5)

#결과
Push : 0
Push : 1
Push : 2
Push : 3
Push : 4
Push : 5
--------
Pop  : 5
Pop  : 4
Pop  : 3
Pop  : 2
Pop  : 1
Pop  : 0

짧은 코딩이지만, 조금은 생각해야 합니다.

 

 

List를 이용하여 간단히 스택구조를 구현할 수 있습니다.

#List를 이용한 스택구조
data_stack = list()

for i in range(10):
    data_stack.append(i)
    print('Push :', data_stack)

for i in range(10):
    data_stack.pop()
    print('Pop  :', data_stack)
    
#결과
Push : [0]
Push : [0, 1]
Push : [0, 1, 2]
Push : [0, 1, 2, 3]
Push : [0, 1, 2, 3, 4]
Push : [0, 1, 2, 3, 4, 5]
Push : [0, 1, 2, 3, 4, 5, 6]
Push : [0, 1, 2, 3, 4, 5, 6, 7]
Push : [0, 1, 2, 3, 4, 5, 6, 7, 8]
Push : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Pop  : [0, 1, 2, 3, 4, 5, 6, 7, 8]
Pop  : [0, 1, 2, 3, 4, 5, 6, 7]
Pop  : [0, 1, 2, 3, 4, 5, 6]
Pop  : [0, 1, 2, 3, 4, 5]
Pop  : [0, 1, 2, 3, 4]
Pop  : [0, 1, 2, 3]
Pop  : [0, 1, 2]
Pop  : [0, 1]
Pop  : [0]
Pop  : []

 

좀 더 직관적이고, 간단한 방법으로 스택구조를 구현할 수 있습니다. 

 

스택구조는 많은 곳에서 사용됩니다.

 

윈도우에서 Ctrl+Z,  브라우저에 뒤로 가기 등 스택구조로 동작합니다. 

 

간단한 구조이지만, 많이 쓰이기 때문에 반드시 알아야 하는 구조입니다.

728x90
반응형

+ Recent posts