括号匹配问题(c语言实现)
一、前言
用栈实现括号匹配:
依次扫描所有字符,遇到左括号入栈,遇到右括号则弹出栈顶元素检查是否匹配。
匹配失败的情况:
- 左括号单身
- 右括号单身
- 左右括号不匹配
二、例题
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
示例1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
示例 4:
输入:s = "([)]" 输出:false
示例 5:
输入:s = "{[]}" 输出:true
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
代码:
#include<stdio.h> #define maxSize 10000 /*栈的结构体定义*/ typedef struct { char data[maxSize]; int top; }SqStack; /*初始化栈*/ void initStack(SqStack& s) { s.top = -1; } /*返回栈顶元素*/ int getElem(SqStack s, char& ch) { if (s.top == -1)//栈为空 { return 0; } ch = s.data[s.top]; return 1; } /*判空*/ int isEmpty(SqStack s) { if (s.top == -1) { return 1; } else { return 0; } } /*入栈*/ int Push(SqStack& s,char x) { if (s.top == maxSize - 1)//判断栈满 { return 0; } ++s.top; s.data[s.top] = x; return 1; } /*出栈*/ int Pop(SqStack& s) { if (s.top == -1)//判断栈空 { return 0; } --s.top; return 1; } int main() { SqStack st; initStack(st); char s[10000],ch; scanf("%s", s); int i = 0; while (s[i]) { if (s[i] == '\'' || s[i] == '\'' || s[i] == '\"' || s[i] == '\"') { i++; } else { if (s[i] == '('||s[i]=='{'||s[i]=='[') { Push(st, s[i]); } else if (s[i] == ')') { getElem(st, ch); if (ch == '(') { Pop(st); } else { break; } } else if (s[i] == ']') { getElem(st, ch); if (ch == '[') { Pop(st); } else { break; } } else if (s[i] == '}') { getElem(st, ch); if (ch == '{') { Pop(st); } else { break; } } } i++; } if (isEmpty(st)) { printf("true"); } else { printf("false"); } return 0; }
本文作者:之于尘
本文链接:https://www.cnblogs.com/cdjlx/p/15547720.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!