스택 구현
collection 없이 구현
from typing import Any class FixedStack: class Empty(Exception): pass class Full(Exception): pass def __init__(self,capacity: int = 256) -> None: self.stk = [None] * capacity self.capacity = capacity self.ptr = 0 def __len__(self) -> int: return self.ptr def is_empty(self) -> bool: return self.ptr <= 0 def is_full(self) -> bool: return self.ptr >= self.capacity def push(self, value: Any) -> None: if self.is_full(): raise FixedStack.Full self.stk[self.ptr] = value self.ptr += 1 def pop(self) -> Any: if self.is_empty(): raise self.Empty self.ptr -= 1 return self.stk[self.ptr] def peek(self) -> Any: if self.is_empty(): raise FixedStack.Empty return self.stk[self.ptr - 1] def clear(self) -> None: self.ptr = 0 def find(self, value: Any) -> Any: for i in range(self.ptr - 1, -1, -1): # index : self.ptr -1 ~ 0 if self.stk[i] == value: return i return -1 def count(self, value:Any) -> bool: c = 0 for i in range(self.ptr): if self.stk[i] == value: c += 1 return c def __contains__(self, value: Any) -> bool: return self.count(value) def dump(self) -> None: if self.is_empty(): print('스택이 비어 있습니다.') else: print(self.stk[:self.ptr])
collection으로 구현
from typing import Any from collections import deque class Stack: def __init__(self, maxlen: int = 256) -> None: self.capacity = maxlen self.__stk = deque([], maxlen) def __len__(self) -> int: return len(self.__stk) def is_empty(self) -> bool: return not self.__stk def is_full(self) -> bool: return len(self.__stk) == self.__stk.maxlen def push(self, value:Any) -> None: self.__stk.append(value) def pop(self) -> Any: return self.__stk.pop() def peek(self) -> Any: return self.__stk[-1] def clear(self) -> None: self.__stk.clear() def find(self, value: Any) -> Any: try: return self.__stk.index(value) except ValueError: return -1 def count(self, value:Any) -> int: return self.__stk.count(value) def __contains__(self, value: Any) -> bool: return self.count(value) def dump(self) -> int: print(list(self.__stk))
Author And Source
이 문제에 관하여(스택 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@aspalt85/스택-구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)