python Data Structure-Stack , Queue

BackEnd_Ash.log·2020년 7월 31일
0

알고리즘

목록 보기
6/14

Stack과 Queue는 비슷한 구조인데 자료를 읽어들이는 순서가 틀립니다.

Stack

Stack은 LIFO(Last In First Out) 이라고 합니다.
마지막으로 저장한 데이터가 처음으로 읽힌다는 뜻입니다.
마치 설겆이 한 접시를 하나 하나 쌓아올리는걸 생각하시면 쉽습니다.

  • stack 에서 데이터 저장은 push 입니다.
  • 데이터를 읽어들이는 건 pop 입니다.
  • 데이터를 읽어들임과 동시에 stack 에서 삭제가 됩니다.

하지만 파이썬은 스택 자료구조는 따로 제공하지 않는다.
다만 기본 클래스인 list 를 통해 스택을 흉내 낼 수 있다.

Stack 구현 push , pop , top

push

stack =[]
stack.append(1) // push
stack.append(2) // push
stack.append(3) // push

pop

stack.pop() // 3
stac // [ 1 , 2 ]

top

스택에서 원소를 제거하지 않고 가져오기만 할때는 -1 를 이용하도록 한다.

stack= [ 1 , 2 , 3 ]
print(stack[-1]) // 3

리스트를 사용한 stack 구현

class Stack:
   def __init__(self):
     self._stack = []

   def push(self, data):
     self._stack.append(data)

   def pop(self):
     if len(self._stack) == 0:
       return None

     data = self._stack[-1]
     del self._stack[-1]

     return data

   def peek(self):
     if len(self._stack) == 0:
       return None

     data = self._stack[-1]

     return data

Queue

Queue는 Stack과 반대로 FIFO(First In First Out) 입니다. 즉 먼저 push 된게 먼저 pop 된다는 말입니다.

줄을 서는 행위와 유사하다

리스트를 사용한 Queue 구현

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

    def push(self, data):
        return self._queue.append(data)

    def pop(self)
        if len(self._queue) == 0:
            return None

        return self._queue.pop()

    def peek(self):
        if len(self._queue) == 0:
            return None

        return self[0]

하지만 Queue 는 Stack 과 달리 라이브러리가 존재한다.

import queue

큐 만들기

import queue
data_queue = queue.Queue()

데이터 넣기

data_queue.put("jakdu")
data_queue.put(3)

큐 사이즈 확인하기

data_queue.qsize() // 2

데이터 꺼내기

data_queue.get() // "jakdu"

Stack 는 접시를 생각하고 , Queue 는 줄서기를 생각하시면 됩니다

참고자료 :
https://www.fun-coding.org/DS&AL1-5.html
https://www.fun-coding.org/DS&AL1-5.html

profile
꾸준함이란 ... ?

0개의 댓글