文山羊 2019-12-17
栈(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('[[[[[((({{{((()){{}})}}})))]]]]]'))