利用栈的基本操作实现一个判断字符串中括号是否正确配对的程序。 具体完成如下: 1.定义栈的顺序存取结构。 2.定义顺序栈的基本操作(初始化栈、判栈空否、入栈、出栈)。 3.实现括号匹配算法的实现。 4.主函数完成括号匹配算法的调用,实现对给定的括号序列进行匹配,给出匹配结果。
时间: 2024-11-03 15:21:35 浏览: 55
实现一个利用栈判断字符串中括号是否正确配对的程序,可以按照以下步骤进行:
1. **定义栈的顺序存取结构**:
使用数组或链表作为底层数据结构,数组可以方便地通过索引来访问元素,而链表则支持动态添加和删除元素。这里我们使用列表作为基础,因为Python内置了列表数据结构。
```python
class Stack:
def __init__(self):
self.items = []
```
2. **定义顺序栈的基本操作**:
- 入栈(push):将字符添加到列表末尾
- 出栈(pop):移除并返回列表最后一个元素
```python
def is_empty(self):
return not bool(self.items)
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
else:
raise Exception("Stack is empty")
```
3. **实现括号匹配算法**:
- 创建两个栈,一个用于存储左括号,另一个用于存储当前遇到的右括号。遍历输入的字符串,对于每个字符:
- 如果是左括号,将其压入左括号栈。
- 如果是右括号,尝试从左括号栈弹出一个对应的左括号:
- 如果能匹配,则继续;否则,说明括号配对错误,返回False。
- 若左括号栈为空,无法匹配,也返回False。
```python
def match_brackets(self, brackets_string):
left_stack = Stack()
opening_brackets = "([{"
closing_brackets = ")]}"
for char in brackets_string:
if char in opening_brackets:
left_stack.push(char)
elif char in closing_brackets:
if left_stack.is_empty() or opening_brackets.index(char) != closing_brackets.index(left_stack.pop()):
return False
# 检查左括号栈是否为空,如果没有剩余的左括号,表示匹配成功
return left_stack.is_empty()
```
4. **主函数**:
创建一个`Stack`实例,并传入待检测的括号序列,然后调用`match_brackets`方法,判断结果并打印。
```python
def main():
brackets_string = input("Enter a string of brackets to check: ")
result = match_brackets(brackets_string)
if result:
print(f"The brackets are correctly matched: {brackets_string}")
else:
print(f"The brackets are not correctly matched: {brackets_string}")
if __name__ == "__main__":
main()
```
阅读全文