栈是一种先进后出(FIFO)的数据结构,是一种特殊的列表,只能访问栈顶元素。
栈通常的操作
Stack() //创建一个栈
isEmpty() //判断栈是否为空,是则返回True,否则返回False
peek() //返回栈顶元素
size() //返回栈的大小
push() //往栈中添加元素,也叫入栈
pop() //删除栈顶元素,也叫出栈
用python列表实现栈
class Stack(object):
#初始化栈为列表
def __init__(self):
self.stack = []
#判断栈是否为空
def isEmpty(self):
return self.stack==[]
#返回栈顶元素
def peek(self):
return self.stack[-1]
#返回栈的大小
def size(self):
return len(self.stack)
#入栈
def push(self, item):
self.stack.append(item)
#出栈
def pop(self):
return self.stack.pop()
#查看栈内的元素
def show(self):
print(self.stack)
使用栈可以解决我们常见的很多问题,如我们常用的Undo也就是撤销操作就可以用栈来实现,另外还有就是编辑器中基本上都会有的括号匹配,也就是当你编写代码时有以下’{(})'的括号不匹配的问题,编辑器会报错。下面我用栈来实现这个操作。
def isVaild(str_vaild):
stack = Stack()
list_vaild = list(str_vaild)
for i in range(len(list_vaild)):
c = list_vaild[i]
if (c=='(' or c=='[' or c=='{'):
stack.push(c)
elif(stack.isEmpty()):
return False
topchar = stack.pop()
if (c=='(' and topchar!=')'):
return False
if (c=='[' and topchar!=']'):
return False
if (c=='{' and topchar!='}'):
return False
return stack.isEmpty()
print(isVaild('{]'))
输出为
False
另外,使用python中的列表实现以上操作也是可以的
def isVaild(str_vaild):
stack = []
list_vaild = list(str_vaild)
for i in range(len(list_vaild)):
c = list_vaild[i]
if (c=='(' or c=='[' or c=='{'):
stack.append(c)
elif(len(stack)==0):
return False
else:
topchar = stack.pop()
if (c=='(' and topchar!=')'):
return False
if (c=='[' and topchar!=']'):
return False
if (c=='{' and topchar!='}'):
return False
return len(stack)==0
print(isVaild('{}[]'))
输出为
True