python实现数据结构-栈
注:本文档主要是学习《Python核心编程(第二版)》时的练习题。
栈是一种"后进先出"的数据结构(LIFO),是一种操作受限的线性结构,数据只能从栈顶进入和栈顶出去。示意图如下:
代码实现方式如下:
1 #!/usr/bin/env python 2 3 stack = [] 4 5 def pushstack(): 6 stack.append(raw_input('Enter new string: ')) 7 8 def popstack(): 9 if len(stack) == 0: 10 print 'Cannot pop from empty stack!' 11 else: 12 print 'Removed [', stack.pop(), ']' 13 14 def viewstack(): 15 print stack 16 17 CMDs = {'u':pushstack, 'o':popstack, 'v':viewstack} 18 19 def showmenu(): 20 pr = """ 21 p(U)sh 22 P(O)p 23 (V)iew 24 (Q)uit 25 Enter choice:""" 26 27 while True: 28 try: 29 choice = raw_input(pr).strip()[0].lower() 30 except(EOFError, keyboardInterrupt, IndexError): 31 choice = 'q' 32 33 print '\nYou picked: [%s]' % choice 34 if choice not in 'uovq': 35 print 'Invalid option, try again' 36 continue 37 38 if choice == 'q': 39 break 40 41 CMDs[choice]() 42 43 44 if __name__ == '__main__': 45 showmenu()
测试现象:
1 [root@localhost python]# python stack.py 2 3 p(U)sh 4 P(O)p 5 (V)iew 6 (Q)uit 7 Enter choice:u 8 9 You picked: [u] 10 Enter new string: abc 11 12 p(U)sh 13 P(O)p 14 (V)iew 15 (Q)uit 16 Enter choice:u 17 18 You picked: [u] 19 Enter new string: cde 20 21 p(U)sh 22 P(O)p 23 (V)iew 24 (Q)uit 25 Enter choice:u 26 27 You picked: [u] 28 Enter new string: 123 29 30 p(U)sh 31 P(O)p 32 (V)iew 33 (Q)uit 34 Enter choice:v 35 36 You picked: [v] 37 ['abc', 'cde', '123'] 38 39 p(U)sh 40 P(O)p 41 (V)iew 42 (Q)uit 43 Enter choice:o 44 45 You picked: [o] 46 Removed [ 123 ] 47 48 p(U)sh 49 P(O)p 50 (V)iew 51 (Q)uit 52 Enter choice:o 53 54 You picked: [o] 55 Removed [ cde ] 56 57 p(U)sh 58 P(O)p 59 (V)iew 60 (Q)uit 61 Enter choice:v 62 63 You picked: [v] 64 ['abc']