列表有容器和可变的特性,这使得它非常灵活,可以用它来构建其他的数据结构如堆栈。
1.堆栈
堆栈是一个后进先出(LIFO)的数据结构,其工作方式就像自助餐厅里面用于放盘子的弹簧支架。把盘子想像成对象,第一个离开堆栈的是最后放上的那个。“push”经常表示的把一个对象压入堆栈中,“pop”则是将堆栈最上面的元素弹出(移除)。其示意图:
2.函数
把列表作为堆栈用于存储和取回输入的字符串。在此,需要用到append()和pop()方法分别模拟push和pop操作。
3.程序
#用列表来模拟堆栈-用于存储和取回输入的字符串
stack = []
def push_stack():
stack.append(input('Enter New sring:').strip())
def pop_stack():
if len(stack) == 0:
print('Cannot pop from an empty stack!')
else:
print('Remove [',stack.pop(),']')
def viewstack():
print(stack)
CMDs = {'u':push_stack,'o':pop_stack,'v':viewstack} #
def showmenu():
pr = """
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: """
while True:
while True:
try:
choice = input(pr).strip()[0].lower()
except (EOFError,KeyboardInterrupt,IndexError):
choice = 'q'
print('\nYou picked: [%s]' % choice)
if choice not in 'uovq':
print('Invalid option, try again')
else:
break
if choice == 'q':
break
CMDs[choice]()
showmenu()
4.结果
=================== RESTART: D:/pythonSpace/D6_04_stack.py ===================
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: u
You picked: [u]
Enter New sring:Kyrie
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: v
You picked: [v]
['Kyrie']
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: u
You picked: [u]
Enter New sring:is
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: u
You picked: [u]
Enter New sring:MVP
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: v
You picked: [v]
['Kyrie', 'is', 'MVP']
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: o
You picked: [o]
Remove [ MVP ]
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: v
You picked: [v]
['Kyrie', 'is']
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: o
You picked: [o]
Remove [ is ]
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: v
You picked: [v]
['Kyrie']
p(U)sh
p(O)p
(V)iew
(Q)uit
Enter choice: q
You picked: [q]