초보 개발자

파이썬 스택 Stack 간단구현! 본문

AI 웹개발 트랙 - 내배캠/4주차

파이썬 스택 Stack 간단구현!

taehyeki 2022. 1. 7. 18:53

 

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None


class Stack:
    def __init__(self):
        self.head = None

    def push(self, value):
        new = Node(value)
        new.next = self.head
        self.head = new

    # pop 기능 구현
    def pop(self):
        if self.is_empty():
            print('array is empty')
            return
        deleted = self.head
        self.head = self.head.next
        return deleted.data

    def peek(self):
        if self.is_empty():
            print('array is empty')
            return
        print(self.head.data)

    # isEmpty 기능 구현
    def is_empty(self):

        return self.head is None

 

먼저 링크드 리스트에서 사용하던 노드를 이번에 또 사용해보려고한다.

노드 클래스, 그리고 스택 클래스를 정의해주자. 스택에는 여러 메서드가 있다.

push, pop, peek, is_empty이다. 먼저 스택이란, 프링글스 과자라고 생각하면된다. 프링글스는 기다란 통안에 갑자칩이 쌓여있다. 위에있는 감자칩을 먹어야 아래있는 감자침을 먹을 수 있다. 스택또한 마찬가지이다. 선입후출의 개념으로 생각하자.

 

stack클래스에는 인스턴스변수 head가 있다. 이 head안에 새로운 노드를 넣어주는 방식이다.

 

push메서드를 먼저 살펴보자. push는 새로운 데이터를 집어 넣는 것이다. 새로운 노드를 생성하고 새로운 노드의 next에 기존의 있던 head 노드를 넣는다. 그리고 새로운 노드를 새로운 헤드에 넣는 방식이다. 

 

pop은 간단하다 최근 데이터를 삭제하는 기능이다. head.next에 있는 노드를 head로 바꿔주면된다. 그리고 pop은 삭제된 데이터를 반환하기 때문에 return값을 주었다.

 

peek은 최근 데이터를 return하는 함수이고,

 

is_empty는 현재 데이터가 있는지의 유무이다. peek과 pop은 데이터가 없을경우와 있을 경우가 다르니 is_empty를 사용하여 if분기문을 사용해주자

'AI 웹개발 트랙 - 내배캠 > 4주차' 카테고리의 다른 글

파이썬 해쉬 hash 간단구현 !!!  (0) 2022.01.08
파이썬 큐 Queue 간단 구현!!  (0) 2022.01.07
딥러닝 xor  (0) 2022.01.07
머신러닝  (0) 2022.01.06
np.random.seed(int)  (0) 2022.01.06