zoukankan      html  css  js  c++  java
  • 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 '
    You 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() 这两个列表类型内建函数的调用.

  • 相关阅读:
    Linux内核中锁机制之RCU、大内核锁
    Linux内核中锁机制之完成量、互斥量
    Linux内核中锁机制之信号量、读写信号量
    Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁
    Linux内核中锁机制之原子操作、自旋锁
    Linux内核jiffies简介
    pdflush机制
    ext2文件系统
    从ext2文件系统上读出超级块
    ext2磁盘布局
  • 原文地址:https://www.cnblogs.com/jmilkfan-fanguiju/p/7532318.html
Copyright © 2011-2022 走看看