C语言解决堆栈括号匹配问题示例详解
作者:xr415
这篇文章主要为大家介绍了C语言堆栈括号匹配问题示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
1.括号匹配问题就是当遇到{( [这些左括号的时 将括号字符入栈
2.当遇到右括号时判断栈顶元素是不是与左括号匹配如果匹配就出栈
如果不匹配就直接结束程序(即括号匹配失败)
首先构建栈
struct STACK { char num[10]; int top; }; struct STACK* creatstack() { struct STACK* stack = new struct STACK; assert(stack); stack->top = -1;//0 -1这些根据直接所习惯去标记栈顶 -1只是先置加 0后置加 return stack; } void push(struct STACK* stack, char ch) { stack->num[++stack->top] = ch; } void pop(struct STACK* stack) { stack->top--; }
调用匹配函数
如果返回true即匹配成功 返回false即匹配失败
bool Match(struct STACK* stack, char* match) { int len = strlen(match); for (int i = 0; i < len; ++i) { if (match[i] == '{' || match[i] == '[' || match[i] == '(') { push(stack, match[i]); } if (match[i] == '}' ) { if (stack->num[stack->top] == '{') { pop(stack); } else { return false; } } if (match[i] == ')' ) { if (stack->num[stack->top] == '(') { pop(stack); } else { return false; } } if (match[i] == ']' ) { if (stack->num[stack->top] == '[') { pop(stack); } else { return false; } } } if (stack->top == -1) return true; else { return false; } }
代码调用
如果是输出1说明匹配成功 输出0匹配不成功
int main() { struct STACK* stack = creatstack(); char str[10] = "()[][]{}"; cout << Match(stack ,str)<< endl; }
以上就是C语言堆栈括号匹配问题示例详解的详细内容,更多关于C语言堆栈括号匹配的资料请关注脚本之家其它相关文章!