欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

栈python(数据结构与算法)----匹配

程序员文章站 2024-01-24 17:34:16
...

题目:

在一个用字符串描述的表达式“{[a+b]/f+(c+d)}”中存在大、中、小括弧,请编写程序,基于栈,实现对输入的一串字符串的依次扫描,并检查括号匹配成功。

示例:

输入样例:{{}}()(hell0){({world}{})}

输出:括号匹配成功

输入样例:{{}}()(hell0){({world}(})}

输出:括号匹配不成功

分析

1假设输入样例为:{{}}()(hell0),简化为{{}}()(),只需将 遇到括号的左边部分压栈即可,此例为:{,{,(,(压栈。

 2 判断{},或(),即左括号和右括号匹配,只需弹出栈顶元素与)或}比较是否匹配,为了方便识别对应的括号,提前建立一个字典,使右边的括号为键,左边的括号为值,如下:

栈python(数据结构与算法)----匹配

class SqStack():
    
    def __init__(self,maxsize):
        self.maxsize = maxsize
        self.stackElem = [None] * self.maxsize
        self.top = 0#指向栈顶元素的下一个储存单元位置
        
    def clear(self):
        self.top = 0
        
    def isEmpty(self):
        return self.top == 0
    
    def length(self):
        return self.top
    
    def peek(self):
        
        if not self.isEmpty():
            return self.stackElem[self.top -1]
        else:
            return None
        
    def push(self,x):
        if self.top == self.maxsize:
            raise Exception("栈已经满了")
        self.stackElem[self.top] = x
        self.top += 1
        
    
    def pop(self):
        if self.isEmpty():
            return None
        self.top -= 1
        return self.stackElem[self.top]
    
    def display(self):
        for i in range(self.top-1,-1,-1):
            print(self.stackElem[i],end=' ')
#练习习题
def isMatched(str1):
    dictMatched = {')':'(',
                   '}':'{'
                   }
    stack = SqStack(20)#建立栈并指定大小
    
    for c in str1:
        if c == '(' or c == '{':
            stack.push(c)#将左边的括号压栈
        if c == ')' or c == '}':
            if stack.isEmpty():#栈为空,返回False
                return False
            if stack.peek() == dictMatched[c]:#判断栈顶元素是否匹配
                stack.pop()#匹配成功,弹出栈
            else:
                return False
            
            
s1 = "{{}}()(hello){({world}{})}"
s2 = "{{}}()(hell0){({world}(})}"
print("s1",end=' ')
if isMatched(s1):
    print('括号匹配成功')
else:
    print('括号匹配不成功')

print("s2",end='')
if isMatched(s2):
    print('括号匹配成功')
else:
    print('括号匹配不成功')
s1 括号匹配不成功
s2括号匹配不成功