스택과 큐의 구현에는 비슷한게 몇가지가 있다. 우선,
class = Node def __init__(self, value, next): self.value = value self.next = next
이렇게 노드 클래스를 잡아두고(스택으로 쌓아주던, 큐로 순서대로 나열하던 그 대상은 value라는 내용물과 다음을 지칭해주는 next가 포함되어있어야하기 때문)
그리고 각자의 클래스
class = Stack // class = Queue 를 잡아주고 클래스의 메서드를 만들어주는데
공통적인 기능으로 push와 pop, is_empty가 있어야한다.def is_empty(self): return self.top(or front) is None
is_empty는 그냥 비어있는가를 확인해주는 녀석으로 self.top이나 front가 None이면 값을 리턴해준다는 개념이다.
top과 front가 갈리는건 스택은 설거지거리가 쌓이는 개념으로 제일 위에서부터 값이 나오기때문에 top, front는 매표소의 줄 같은 개념으로 제일 앞의 녀석부터 값이 나오기때문에 front라고 정의해주는 것.
def push(self, value): self.front(or top) = Node(value, None)
비슷하다면 비슷하지만 많은 차이점이 생긴다. 우선, 비어있을때 새로이 값을 넣어주는(push) 것이기 때문에 Node에 value값이 들어있어야 한다. 다만, 큐같은 경우에는 위의 경우에 if문을 감싸서 self.front값이 비어있을때의 조건으로 따로 잡아줘야한다. 큐같은 경우는 처음 녀석이 마지막이기에 누군가를 가르켜줄 필요가 없기 때문에 None이지만, 스택은 Node(value,self.front)로 새로운 노드가 기존의 self.front를 가르켜줄 필요가 있다.
def pop(self): if self.front(or top) = None: return None ################################# node = self.front(or top) self.top = self.top.next return node.value
우선 pop(데이터를 꺼내서 본다는 느낌)을 하기 전에 값이 있는지 확인해주는데, 위의 방식 말고도 is_empty함수를 조건문에 사용하거나 if not self.front:
와 같은 경우도 self.front(is not None)이 아니라면(if not)이기때문에 같은 조건을 지칭한다.
그리고 node는 class의 Node가 아니라 값을 보려는 특정 녀석을 node라는 변수로 지정하고 그 녀석이 가장 먼저 나오는 값 self.front(or top)인 것이다. 이후 self.front = self.front.next로 다음 녀석이 지정되어야하고(기존의 self.front는 pop되어서 나가버렸다!)
node의 value값이 리턴되어주면 된다.