编写代码,实现一个栈(Stack)的类。
栈是只能在一端插入和删除数据的序列。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
class Stack(object):
def __init__(self):
self.items = []
#定义栈
def is_empty(self):
return self.items == []
#判断栈空
def peek(self):
try:
return self.items[-1]
except IndexError:
print("Error: peek from empty stack")
#返回最后一个值,极为返回栈顶
#同时考虑到空栈不能返回栈顶
def size(self):
return len(self.items)
#返回列表长度极为栈长度
def push(self,item):
self.items.append(item)
#模拟压入值操作,就是将值加到列表最后
def pop(self):
try:
return self.items.pop()
except IndexError:
print("Error: pop from empty stack")
#同时考虑了空栈时不能弹出
#pop在弹出最后一个值时同时返回这个值
def read(self):
strs = ['%s'% i for i in reversed(self.items)]
return "".join(strs)
#利用python本身的性质来模拟栈的操作
#测试
if __name__ == '__main__':
# 初始化一个栈对象
my_stack = Stack()
my_stack.push('h')
my_stack.push('a')
# 看一下栈的大小(有几个元素
print(my_stack.read())
# 读栈,看是否从栈顶遍历
print(my_stack.size())
# 打印栈顶元素
print(my_stack.peek())
print(my_stack.pop())
print(my_stack.peek())
print(my_stack.size())
print(my_stack.pop())
print(my_stack.size())
print(my_stack.is_empty())
print(my_stack.peek()
#尝试空栈操作