: 자료 data elemet 를 보관할 수 있는 (선형) 구조
S = Stack()
S.push(A)
S.push(B)
그림r1 = S.pop()
→ Ar2 = S.pop()
→ B비어 있는 스택에서 데이터 원소를 꺼내려 할 때 r3 = S.pop()
➡️ 스택 언더플로우 stack underflow
꽉 찬 스택에 데이터 원소를 넣으려 할 때 그림
➡️ 스택 오버플로우 stack overflow
size()
: 현재 스택에 들어 있는 데이터 원소의 수를 구함isEmpty()
: 현재 스택이 비어 있는지를 판단push(x)
: 데이터 원소 x
를 스택에 추가pop()
: 스택의 맨 위에 저장된 데이터 원소를 제거 (또한 반환)peek()
: 스택의 맨 위에 저장된 데이터 원소를 반환 (제거하지 않음)배열 array을 이용하여 구현
class ArrayStack:
def __init__(self): # Constructor Method
self.data = [] # 빈 스택을 초기화
def size(self):
return len(self.data) # 스택의 크기를 리턴
def isEmpty(self):
return self.size() == 0 # 스택이 비어 있는지 판단
def push(self, item):
self.data.append(item) # 데이터 원소를 추가
def pop(self):
return self.data.pop() # 데이터 원소를 삭제, 리턴
def peek(self):
return self.data[-1] # 스택의 꼭대기 원소 반환
연결 리스트 linked list를 이용하여 구현
from doublylinkedlist import Node
from doublylinkedlist import DoublyLinkedList
class LinkedListStack:
def __init__(self):
self.data = DoublyLinkedList() # 비어있는 dl로 초기화
def size(self):
return self.data.getLength()
def isEmpty(self):
return self.size() == 0
def push(self, item):
node = Node(item)
self.data.insertAt(self.size() + 1, node)
def pop(self):
return self.data.popAt(self.size())
def peek(self):
return self.data.getAt(self.size()).data
라이브러리
from pythonds.basic.stack import Stack
S = Stack() # Stack 초기화
dir(S) # method 보기
올바른 수식:
올바르지 않은 수식:
알고리즘 설계 - 수식을 왼쪽부터 한 글자씩 읽어서:
문제 설명