如何使用栈来实现括号匹配
Posted me-moirs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用栈来实现括号匹配相关的知识,希望对你有一定的参考价值。
题目:
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
输出格式:
如果括号配对,输出yes,否则输出no。
- 代码实现:
1 #include<iostream> 2 #include<cstdlib> 3 using namespace std; 4 #define OVERFLOW 1 5 #define ERROR 0 6 #define OK -2 7 #define MAXSIZE 100 8 typedef int SElemType; 9 typedef int Status; 10 typedef struct//顺序栈的定义 11 { 12 SElemType *base;//栈底指针 13 SElemType *top;//栈顶指针 14 int stacksize;//栈可用的最大容量 15 }SqStack; 16 Status InitStack(SqStack &S)//顺序栈的初始化 17 { 18 S.base=new SElemType[MAXSIZE]; 19 if(!S.base) exit(OVERFLOW);//存储分配失败 20 S.top=S.base;//空栈 ,top 初始化 base 21 S.stacksize=MAXSIZE;//stacksize 置为栈的最大容量MAXSIZE 22 return OK; 23 } 24 bool StackEmpty(SqStack S)//判断是否栈空 25 { 26 if(S.top==S.base) return true; 27 else return false; 28 } 29 Status Push(SqStack &S,SElemType x)//入栈 30 { 31 if(S.top-S.base==S.stacksize) return ERROR;//栈满 32 *S.top++=x;//元素e压入栈顶,栈顶指针加1 后置自加 *S.top=e;S.top++; 33 return OK; 34 } 35 Status POP(SqStack &S,SElemType &x)//出栈 36 { 37 if(S.top==S.base) return ERROR;//栈空 38 x=*--S.top;//栈顶指针减1,将栈顶元素赋给e 前置 --S.top;e=*S.top; 39 return OK; 40 } 41 SElemType GetTop(SqStack S)//取栈顶元素 42 { 43 if(S.top!=S.base) return *(S.top-1); 44 } 45 int main() 46 { 47 int flag = 1;//需要一个标记 48 SqStack S; 49 InitStack(S); 50 SElemType x; 51 52 char ch[100];//采用字符数组 53 cin.getline(ch,100); 54 int length=0; 55 for(int i=0;ch[i]!=‘