《括号匹配问题源代码(C语言).pdf》由会员分享,可在线阅读,更多相关《括号匹配问题源代码(C语言).pdf(2页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、括号匹配(c c语实现)1 1要求编写程序检查该字符串的括号是否成对出现,且不能交叉出现。输:个字符串,边可能包含“()”、“”三种括号,“#”结束输出:成功:代表括号成对出现并且嵌套正确失败:未正确使括号字符。2 2分析个栈,就能解决该问题,左括号栈顶字符必须和第个栈的右括号字符匹配。栈介绍:栈是种特殊的线性表,仅能在线性表的端操作。栈的特性:后进先出(LIFO)由于正在学数据结构,于是栈的定义与操作都是编写的,为了巩固概念3 3代码#include#include#define STACK_INT_SIZE 100#define STACKINCREMENT 10#define bool
2、int /定义bool变量#define SElemType chartypedef struct SElemType*base;/栈基地址 SElemType*top;/栈顶地址 int stacksize;SqStack;/-基本操作的算法描述-/构建个空栈bool InitStack(SqStack*S)S-base=(SElemType*)malloc(STACK_INT_SIZE*sizeof(SElemType);/开辟新的空间 if(!S-base)return 0;/开辟失败返回0 S-top=S-base;S-stacksize=STACK_INT_SIZE;return 1
3、;/若栈不为空,返回栈顶元素,并返回true 否则返回 falsebool GetTop(SqStack S)if(S.top=S.base)return 0;return*(S.top-1);/插元素 为新的栈顶元素bool Push(SqStack*S,SElemType e)if(S-top-S-base=S-stacksize)/如果栈满 需要增加空间 S-base=(SElemType*)realloc(S-base,(S-stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S-base)return 0;S-top=S-base+S-st
4、acksize;S-stacksize+=STACKINCREMENT;*(S-top+)=e;return 1;/若栈不为空,则删除栈顶元素,e返回其值,返回true,否则返回falsebool Pop(SqStack*S,SElemType*e)if(S-top=S-base)return 0;*e=*(-S-top);return 1;/检查括号字符在字符集中的位置int CheckChar(char c,char OP)int i;for(i=0;i 3;i+)if(c=OPi)return i;return 999;int main()SqStack OPTR;InitStack(&
5、OPTR);Push(&OPTR,#);printf(输括号以“#”结尾n);char c;c=getchar();int m=1;/判断最终是否完全匹配 完全匹配 值为1,否则为0 char OP1=,(,;/前置括号字符集 char OP2=,),;/后置括号字符集 while(c!=#)if(CheckChar(c,OP1)3)Push(&OPTR,c);c=getchar();else if(CheckChar(GetTop(OPTR),OP1)=CheckChar(c,OP2)/如果需要检验的两个符号在前置和后置括号集中的位置相同则表配对成功 /例如和,在前置括号集中的位置1,在后置括号集中的位置1,所以匹配成功 Pop(&OPTR,&c);c=getchar();continue;else m=0;break;if(GetTop(OPTR)!=c)m=0;if(m=1)printf(n括号完全匹配!);else printf(n括号匹配失败!);return 0;