• 数据结构之栈(使用Python描述)


    栈(Stack)的特性是先进后出.即是First In Last Out.栈也是在一端进行操作的.

    先进入栈的元素是最后出来的.比如说,我们使用的浏览器进行标签后退操作时,首先返回的是上一个就近的标签.

    栈的特性是反转次序,也就是First In Last Out.

    有关于Stack的可视化数据操作:www.cs.usfca.edu/~galles/visualization/StackArray.html.这可以帮助到你理解Stack的特性.

    '''
    - 栈 Stack
        - 一种有次序的数据项集合.
        - 在栈中,数据项的加入和移除都仅发生在同一端
        - 这一端叫栈“顶top”,另一端叫栈“底base”
        - 例如日常生活中的成叠的盘子
    - 距离栈底越近的数据项,留在栈中的时间就越长,而最新加入栈的数据项会被最先移除
        - 这种次序通常称为"后进先出LIFO" Last in frist out
        - 这是一种基于数据项保存时间的次序,时间的离栈顶越近而时间越长的离栈底越近    
    
    - 栈的特性
        - 反转次序
    '''
    
    
    '''
    - 栈的抽象数据类型定义
        - Stack():创建一个空栈,不包含任何数据项
        - push(item):将item加入栈顶,无返回值
        - pop():将栈顶数据项移除,并返回,栈被修改
        - peek():“窥视”栈顶数据项,返回栈顶的数据项但不移除,栈不被修改
        - isEmpty():返回栈是否为空栈
        - size():返回栈中有多少个数据项
    
    '''
    
    class Stack(): # 将末端设置为栈顶/ 这里要加一个括号
        def __init__(self): # self在对象的方法中表示对象本身,如果通过对象调用一个方法,那么对象就会自动成为地一个参数
            self.items = [] # items表示的是一个属性
        def isEmpty(self):#判断栈是否为空
            return self.items == []
        def push(self,item):#在栈尾添加元素
            return self.items.append(item)
        def pop(self):# 在栈尾移除元素
            return self.items.pop()
        def peek(self):# 返回在栈尾的元素
            return self.items[len(self.items)-1]
        def size(self):# 返回栈的元素个数
            return len(self.items)
    
    a = Stack()
    a.push(1)
    a.push('das')
    a.push('dasd')
    a.push('rew')
    
    print(a.size())
    
    
    # 以下代码是栈的实际使用: 进行括号的匹配
    
    def parCheckers(symbolString):
        
        s = Stack()
        index = 0
        balance = True
    
        while index<len(symbolString) and balance:
            
            symbol = symbolString[index]
    
            if symbol in'([{':
                s.push(symbol)
            else:
                if s.isEmpty():
                    balance = False
                else:
                    top = s.pop()
                    if not matches(top,symbol):
                        balance = False
            index = index+1;
        if s.isEmpty() and balance:
            return True
        else:
            return False
    
    def matches(open,close):
        opens = '([{'
        closes = ')]}'
        return opens.index(open) == closes.index(close)
    
    print(parCheckers('[[[[[((({{{((()){{}})}}})))]]]]]'))
    
  • 相关阅读:
    fcc的高级算法题
    jq on方法绑定多个事件
    高效的jQuery代码编写技巧
    HTML 提高页面加载速度的方法
    link 和 import 导入外部样式的区别
    js将多个方法添加到window对象上的多种方法
    js 数组删去重复的加上没有的元素
    JS中定义对象原型的两种使用方法
    CSS 清除默认样式
    JavaScript中定义对象的四种方式 2012-5-10 15:19 阅读(0)
  • 原文地址:https://www.cnblogs.com/gtscool/p/12053887.html
Copyright © 2020-2023  润新知