MAX_SIZE = 100
classMyStack1(object):"""模拟栈"""
def __init__(self):
self.items=[]
self.size=0defis_empty(self):"""判断是否为空"""
return self.size ==0defsize(self):"""返回栈的大小"""
returnself.sizedefpush(self, item):"""压栈(加入元素)"""self.items.append(item)
self.size+= 1
defpop(self):"""弹栈(弹出元素)"""
if self.size < MAX_SIZE and self.size >=0:
self.size-= 1
returnself.items.pop()else:print("栈已经为空")returnNonedefpeek(self):if notself.is_empty():return self.items[self.size-1]else:returnNonedef __str__(self):returnstr(self.items)classMyStack2(object):"""模拟栈"""
def __init__(self):
self.items=[]
self.size=0defis_empty(self):"""判断是否为空"""
return self.size ==0defsize(self):"""返回栈的大小"""
if self.size <=MAX_SIZE:returnself.sizedefpush(self, item):"""压栈(加入元素)"""
if self.size <=MAX_SIZE:
self.items.insert(0, item)
self.size+= 1
defpop(self):"""弹栈(弹出元素)"""
if self.size > 0 and self.size <=MAX_SIZE:
self.size-= 1
returnself.items.pop(0)else:print("栈已经为空")returnNonedefpeek(self):"""返回栈顶元素"""
if notself.is_empty():returnself.items[0]else:returnNonedef __str__(self):returnstr(self.items)classNode():def __init__(self, data, next=None):
self.data=data
self.next=nextdef __repr__(self):returnstr(self.data)classNodeStack():def __init__(self):
self.node=Node(None)
self.head=self.node
self.size=0defis_empty(self):return self.size ==0defget_size(self):returnself.sizedefpush(self, data):
node=Node(data)
node.next=self.head.next
self.head.next=node
self.size+= 1
defpop(self):if notself.is_empty():
current=self.head.nextif self.get_size() == 1:
self.head.next=Noneelse:
self.head.next=self.head.next.next
self.size-= 1
returncurrent.dataelse:raise IndexError('pop from a empty stack')defpeek(self):if notself.is_empty():returnself.head.next.dataelse:raise IndexError('stack is empty')def __repr__(self):
stack_list=[]
current=self.headwhile current.next is notNone:
stack_list.append(current.next.data)
current=current.nextreturnstr(stack_list)__str__ = __repr__
deftest(obj):
i=obj()for x in range(0,6):
i.push(x)print(i)
i.pop()print(i, i.peek(), i.size)if __name__ == "__main__":
test(MyStack1)
test(MyStack2)
test(NodeStack)