括号匹配
2017-12-09 23:44
141 查看
//检查一个算法表达式中的括号是否匹配,算术表达式保存于字符数组中 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 20 typedef struct { char data[MAXSIZE]; int top; }SeqStack; //顺序栈类型 void Init_SeqStack(SeqStack **q) //顺序栈初始化 { *q = (SeqStack *)malloc(sizeof(SeqStack)); (*q)->top = -1; } int Empty_SeqStack(SeqStack *q) //判断栈空 { if (q->top == -1) { return 1; } else { return 0; } } void Push_SeqStack(SeqStack *q, char x) //元素入栈 { if (q->top == MAXSIZE - 1) { printf("Stack is full!\n"); } else { q->top++; q->data[q->top] = x; } } void Pop_SeqStack(SeqStack *q, char *x) //元素出栈 { if (q->top == -1) { printf("Error!\n"); } else { *x = q->data[q->top]; q->top--; } } void Top_SeqStack(SeqStack *q, char *x) //取栈顶元素 { if (q->top == -1) { printf("The stack is empty!\n"); } else { *x = q->data[q->top]; } } void Correct(char ex[]) //检查算术表达式中的括号是否匹配 { SeqStack *p; char x, *ch = &x; int i = 0; Init_SeqStack(&p); while (ex[i] != '\n') { if (ex[i] == '(' || ex[i] == '[' || ex[i] == '{') { Push_SeqStack(p, ex[i]); } if (ex[i] == ')' || ex[i] == ']' || ex[i] == '}') { Top_SeqStack(p, ch); if (ex[i] == ')' && *ch == '(') { Pop_SeqStack(p, ch); goto l1; } if (ex[i] == ']' && *ch == '[') { Pop_SeqStack(p, ch); goto l1; } if (ex[i] == '}' && *ch == '{') { Pop_SeqStack(p, ch); goto l1; } else { break; //不配对时则终止扫描 } } l1: i++; //继续扫描下一个字符 } if (!Empty_SeqStack(p)) { //算术表达式扫描结束或非正常结束时,若栈不为空则不配对 printf("Error!\n"); } else { printf("Right!\n"); } } int main() { char x[30]; printf("Input exp:\n"); //输入一个算术表达式 scanf("%s", x); Correct(x); return 0; }
相关文章推荐
- 【数据结构】用栈实现括号匹配的检验
- 使用栈来演示括号匹配的算法
- 第六周 项目3-括号的匹配
- 括号匹配(栈实现)
- 栈和队列(一)——栈的实践(1)——括号的匹配
- 题目1153:括号匹配问题[栈]
- UVA 673 Parentheses Balance(括号匹配)
- 待字闺中:括号匹配分析
- 顺序栈(进制转换 + 括号匹配 + 判断栈表 + 最长括号匹配长度)
- 数据结构——括号匹配
- 烟大 2238: 括号匹配(栈和队列)
- 括号匹配
- 数据结构实验之栈四:括号匹配
- Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现
- 括号匹配问题
- 20. Valid Parentheses (括号匹配)
- 用栈实现括号匹配的算法
- SDUT OJ 数据结构实验之栈四:括号匹配
- STL——括号匹配
- 【数据结构】链表实现括号匹配