/************************ author's email:[email protected] date:2018.2.5 链栈及其应用(括号匹配) ************************/ #include <iostream> using namespace std; #define maxSize 50 typedef struct LNode { char data; struct LNode *next; }LNode; void initStack(LNode *&lst) { lst = (LNode *)malloc(sizeof(LNode)); lst = NULL; } int isEmpty(LNode *lst) { if (lst == NULL) return 1; else return 0; } void pushStack(LNode *&lst, char x) { LNode *p; p = (LNode *)malloc(sizeof(LNode)); p->next = NULL; p->data = x; p->next = lst;//将结点p插入链栈 lst = p; } int popStack(LNode *&lst, char &x) { LNode *p; if (lst == NULL) return 0; p = lst;//p指向第一个数据结点 x = p->data; lst = p->next; free(p); return 1; } int match(char exp[]) {//括号匹配 char x; LNode *p; initStack(p); int i; for (i = 0; exp[i] != '\0'; ++i) {//访问字符数组exp[]中每个元素 if (exp[i] == '(')//遇到(,则入栈 pushStack(p, '('); if (exp[i] == ')') { if (isEmpty(p))//如果遇到的是)并且栈已空,则不匹配,返回0 return 0; else popStack(p,x);//如果不为空,则出栈。相当于划掉一对括号 } } if (isEmpty(p))//栈空,则说明括号匹配 return 1; else return 0;//栈不空,则不匹配 } int main() { char exp[] = { '(','(', '(', '(', '(' , '4','+','2',')' ,'/','3',')' ,'*','5',')' ,'-','4',')' ,'/','2',')' ,'*','7','\0' };//表达式为(((((1+2)/3)*5)-4)/2)*7 if (match(exp)) cout << "括号匹配成功!" << endl; else cout << "括号匹配失败!" << endl; system("pause"); return 0; }
数据结构——链栈及其应用(括号匹配)
猜你喜欢
转载自blog.csdn.net/wardseptember/article/details/79259944
今日推荐
周排行