defpop(self): if self.is_empty(): raise IndexError("Stack is empty") else: data = self.stack.pop() self.top -= 1 return data
defis_empty(self): return self.top == -1
deflen(self): return self.top+1
defgetTop(self): if self.is_empty(): print("Stack is empty") return else: return self.stack[self.top]
defdisplay(self): if self.is_empty(): print("Stack is empty") else: for i inrange(self.len()): print(f"第{i+1}元素:{self.stack[i]}")
案例应用
1、匹配括号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
from sequence_stack import SequenceStack
txt = "(()()()())(((())))(()((())()))"
defperCheck(txt): stack = SequenceStack() for t in txt: if t == '(': stack.push(t) elif t == ')': if stack.is_empty(): returnFalse else: stack.pop() else: continue return stack.is_empty()
print(perCheck(txt))
2、进制转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from sequence_stack import SequenceStack defbinaryTransform(num): stack = SequenceStack() while num>0: d = num % 2 stack.push(d) num = num//2
binStr = '' while stack.is_empty() == False: d = stack.pop() binStr = binStr + str(d)
defintToBinaryStr_stack(num:int,base): convertStr = '0123456789ABCDEF' if num // base <= 0: stack.push(convertStr[num]) else: stack.push(convertStr[num%base]) intToBinaryStr_stack(num//base,base)