(TIL20) Stack & Queue

SooHyung Kim·2020년 4월 20일
0

Today I learned

목록 보기
17/25

Stack

  • 마지막으로 저장한 데이터가 처음으로 읽히는 자료구조(Last In First Out)

  • Stack에서 데이터 저장은 Push라고 칭함

  • 데이터를 읽어 들이는 것은 Pop이며, 읽어들임과 동시에 stack에서 삭제

class Mystack:
    def __init__(self):
        self.plate = []

    def push(self, value):
        self.plate.append(value)

    def pop(self):
        if len(self.plate) == 0:
            return "다 먹었슈"
        else:
            return self.plate.pop()

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

    def peak(self):
        return self.plate[-1]

    def print_stack(self):
        print(f'접시 위에 팬케이크가 {self.plate} 만큼 있습니다.')

my_stack = Mystack()

print(my_stack.push('바닐라맛'))
print(my_stack.push('초코맛'))
print(my_stack.peak())
print(my_stack.push('녹차맛'))
print(my_stack.push('커피맛'))
print(my_stack.plate)

print(my_stack.pop())
print(my_stack.pop())
print(my_stack.pop())
print(my_stack.pop())
print(my_stack.pop())
print(my_stack.plate)

my_stack.print_stack()

Stack의 활용

  • 웹브라우저 방문기록(뒤로가기) 및 실행취소
  • 미로찾기 알고리즘(방문한 곳을 좌표로 표기하고, 다음 방문할 곳을 탐색한 후 Stack에 가능한 곳 전부를 push하고 다시 pop하면서 현재 경로롤 변경

Queue

  • 데이터가 들어온 순서대로 처리(먼저 push된 것이 먼저 pop, First In First Out)
class Queue:
    def __init__(self):
        self.waiting = []

    def enqueue(self, person):
        self.waiting.append(person)
        return f'{person}이 대기줄에 추가되었습니다.'

    def dequeue(self):
        if self.is_empty():
            return "대기자 없음! 아무나 튀어나와"
        else:
            return self.waiting.pop(0)

    def front(self):
        if self.is_empty():
            return "대기자 없음, 아무나 튀어나와"
        else:
            person = self.waiting.pop()
            return person

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

    def print_queue(self):
        return f'저희 까페 대기 손님은 {self.waiting}으로 총 {self.waiting}명이 대기 중입니다.'

queue = Queue()

print(queue.is_empty())
print(queue.enqueue("예리"))
print(queue.enqueue("두리"))
print(queue.enqueue("준식"))
print(queue.enqueue("승현"))
print(queue.waiting)

print(queue.front())
print(queue.waiting)

print(queue.dequeue())
print(queue.dequeue())
print(queue.front())

Queue의 활용

  • CPU의 프로세스 스케줄링
  • 프린터의 인쇄 대기 목록
  • 맛집 예약, 티켓카운터 등의 예약 시스템
profile
Slow and steady win the race

0개의 댓글