DataStructure: Stack & Queue

Seoyul Kim·2020년 4월 21일
0

DataStructure

목록 보기
2/4

Stack

  • LIFO(Last In First Out), 마지막으로 저장한 데이터가 처음으로 읽힌다.
  • 저장은 push, 데이터를 읽어들이는 건 pop이라고 하는데, pop은 읽어들임과 동시에 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

언제 사용할까?

  • 프로그램에서 함수 호출 기록을 stack으로 저장한다.
  • web browser 내역 흑등 내역인데 최신 내역이 먼저 나와야 하는 경우
  • 웹브라우저 방문기록(뒤로가기), 실행 취소
  • 미로 찾기 알고리즘(방문한 곳을 좌표로 표기하고, 다음 방문할 곳을 탐색한 후 stack에 간으한 곳 전부를 push하고, 다시 pop하면서 현재 경로로 변경하는 것을 반복)

Queue

  • FIFO(First In First Out), 먼저 push 된게 먼저 pop 된다.
  • 일반적인 queue 말고도 double ended queue, priority 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]

언제 사용할까?

  • 맛집 예약, 티켓 카운터 등의 예약 시스템
  • OS 프로세서 스케쥴링 시스템(priority queue 사용)
  • CPU의 프로세스 스케쥴링
  • 프린터의 인쇄 대기 목록

0개의 댓글