Python 数据结构_堆栈

目录

堆栈

堆栈是一个后进先出(LIFO)的数据结构. 堆栈这个数据结构可以用于处理大部分具有后进先出的特性的程序流 .
在堆栈中, pushpop 是常用术语:

  • push: 意思是把一个对象入栈.
  • pop: 意思是把一个对象出栈.

下面是一个由 Python 实现的简单的堆栈结构:


stack = []                 # 初始化一个列表数据类型对象, 作为一个栈

def pushit():              # 定义一个入栈方法
    stack.append(raw_input('Enter New String: ').strip())      
    # 提示输入一个入栈的 String 对象, 调用 Str.strip() 保证输入的 String 值不包含多余的空格

def popit():               # 定义一个出栈方法
    if len(stack) == 0:
        print "Cannot pop from an empty stack!"
    else:
        print 'Remove [', `stack.pop()`, ']'
        # 使用反单引号(` `)来代替 repr(), 把 String 的值用引号扩起来, 而不仅显示 String 的值

def viewstack():           # 定义一个显示堆栈中的内容的方法
        print stack

CMDs = {'u':pushit, 'o':popit, 'v':viewstack}
# 定义一个 Dict 类型对象, 将字符映射到相应的 function .可以通过输入字符来执行相应的操作

def showmenu():            # 定义一个操作菜单提示方法
    pr = """
    p(U)sh
    p(O)p
    (V)iew
    (Q)uit

    Enter choice: """

    while True:
        while True:
            try:
                choice = raw_input(pr).strip()[0].lower()
                # Str.strip() 去除 String 对象前后的多余空格
                # Str.lower() 将多有输入转化为小写, 便于后期的统一判断
                # 输入 ^D(EOF, 产生一个 EOFError 异常)
                # 输入 ^C(中断退出, 产生一个 keyboardInterrupt 异常)

            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]()
        # 获取 Dict 中字符对应的 functionName, 实现函数调用

if __name__ == '__main__':
    showmenu()

NOTE: 在堆栈数据结构中, 主要应用了 List 数据类型对象的 容器可变 等特性, 表现在 List.append()List.pop() 这两个列表类型内建函数的调用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值