1、栈Stack
一种有次序的数据项集合,在栈中,数据项的加入和移除都仅发生在一端,这一端叫栈顶top,另一端叫栈底base。
出入栈规则:Last in First out
具有以下功能
Stack():创建一个空栈
push(item):将item加入栈顶,无返回值
pop():将栈顶数据移除,并且返回,栈被修改
peek():查看栈顶数据,并且返回,栈不会被修改
isEmpty():返回是否为空栈
size():返回栈中有多少个数据项
# List末端作为栈顶实现栈 push和pop的复杂度为O(1)
class MyStack():
def __init__(self):
self.items = []
def isEmpty(self):
return 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]
def size(self):
return len(self.items)
2、栈的简单应用
括号匹配
from Stack import MyStack # 导入自己写的栈
def is_matching(input_string):
"""
:param input_string: input string of brackets
:return: is Match or not
"""
s = MyStack()
balanced = True
index = 0
while index < len(input_string) and balanced:
bracket = input_string[index]
if bracket in "([{":
s.push(bracket)
else:
if s.isEmpty():
balanced = False
else:
right_idx = ")]}".index(bracket)
if "([{".index(s.pop()) == right_idx:
pass
else:
balanced = False
index += 1
if balanced and s.isEmpty():
return True
else:
return False
print(is_matching("{(]}"))
基于栈的进制转换
from Stack import MyStack
def baseConvert(decNumber, base):
"""
:param decNumber: 输入十进制的数
:param base: 转化成何种进制
:return: 二进制数(String)
"""
s = MyStack()
digits = "0123456789ABCDEF"
while decNumber > 0:
rem = decNumber % base
s.push(rem)
decNumber = decNumber // base
newString = ""
while not s.isEmpty():
newString = newString + digits[s.pop()]
return newString
print(baseConvert(100000, 16))