栈(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('[[[[[((({{{((()){{}})}}})))]]]]]'))