用顺序表结构实现
"""
栈要实现的操作
Stack() 创建一个新的空栈
push(item) 添加一个元素item到栈顶
pop() 弹出栈顶元素
top() 返回栈顶元素
isEmpty() 判断栈是否为空
size() 返回栈的元素个数
"""
class Stack:
def __init__(self):
self._items = []
def push(self, *args):
for _ in args:
self._items.append(_)
def pop(self):
if self.isEmpty():
return None
return self._items.pop()
def top(self):
if self.isEmpty():
return None
return self._items[-1]
def isEmpty(self):
return self.size() <= 0
def size(self):
return len(self._items)
if __name__ == '__main__':
s = Stack()
s.push('A', 'B', 'C', 'D', 'E')
while True:
pop = s.pop()
print(pop, s.size())
if not pop:
break
用链表结构实现
"""
栈要实现的操作
Stack() 创建一个新的空栈
push(item) 添加一个元素item到栈顶
pop() 弹出栈顶元素
top() 返回栈顶元素
isEmpty() 判断栈是否为空
size() 返回栈的元素个数
"""
class Node:
def __init__(self, _item, _next=None):
self._item = _item
self._next = _next
def item(self, *args):
if not args:
return self._item
self._item = args[0]
def next(self, *args):
if not args:
return self._next
_next = args[0]
if isinstance(_next, Node) or _next is None:
self._next = _next
class Stack:
def __init__(self):
self._top = None
self._size = 0
def push(self, *args):
"""
_ = A, self._top = Node(A, None), self._size = 1
_ = B, self._top = Node(B, ANode), self._size = 2
_ = C, self._top = Node(C, BNode), self._size = 3
_ = D, self._top = Node(D, CNode), self._size = 4
_ = E, self._top = Node(E, DNode), self._size = 5
"""
for _ in args:
self._top = Node(_, self._top)
self._size += 1
def pop(self):
if self.isEmpty():
return None
self._size -= 1
_oldItem = self._top.item()
self._top = self._top.next()
return _oldItem
def top(self):
return self._top
def isEmpty(self):
return self.size() <= 0
def size(self):
return self._size
if __name__ == '__main__':
s = Stack()
s.push('A', 'B', 'C', 'D', 'E')
""""""
while True:
pop = s.pop()
top = s.top()
top = top.item() if top else None
print(pop, s.size(), top)
if not pop:
break