Python3.7用list模拟堆栈的数据结构

列表有容器和可变的特性,这使得它非常灵活,可以用它来构建其他的数据结构如堆栈

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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值