1. 栈:后进先出(LIFO),最先添加的元素将被最先移除

2.支持的操作↓
·Stack() 创建一个空栈。它不需要参数,且会返回一个空栈。
·push(item) 将一个元素添加到栈的顶端。它需要一个参数item,且无返回值。
·pop() 将栈顶端的元素移除。它不需要参数,但会返回顶端的元素,并且修改栈的内容。
·peek() 返回栈顶端的元素,但是并不移除该元素。它不需要参数,也不会修改栈的内容。
·isEmpty() 检查栈是否为空。它不需要参数,且会返回一个布尔值。
·size() 返回栈中元素的数目。它不需要参数,且会返回一个整数。
3.实现
"""假设列表的尾部是栈的顶端"""
class Stack:
def __init__(self):
"""创建一个空栈"""
self.items = []
def isEmpty(self):
return self.size()==0def size(self):
return len(self.items)
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
4.用法一:匹配括号
"""匹配括号"""
import Stack
def matching(symbolString):
"""创建一个空栈"""
s = Stack()
index = 0
while index < len(symbolString):
symbol = symbolString[index]
"""如果是]})三种右括号,判断栈里顶端元素是否为和它对应的左括号。"""
if symbol == ")" and s.peek() == "(":
s.pop()
elif symbol == "]" and s.peek() == "[":
s.pop()
elif symbol == "}" and s.peek() == "{":
s.pop()
else:
s.push(symbol)
index += 1
if s.size() == 0:
return True
else:
return False
5.用法二:将十进制转换成二进制
import Stack
def divideBy2(decNumber):
test = Stack()
while decNumber > 0:
remainder = decNumber % 2
test.push(remainder)
decNumber = decNumber // 2
binString = ""
while not test.isEmpty():
binString = binString + str(test.pop())
return binString
6.用法三:将十进制转换成任意进制数
import Stack
def baseConverter(decNumber,base):
test = Stack()
#可选数字
digits = "0123456789ABCDEF"
while decNumber > 0:
remainder = decNumber % base
test.push(remainder)
decNumber = decNumber // base
newString = ""
while not test.isEmpty():
newString = newString + digits[test.pop()]
return newString
浙公网安备 33010602011771号