求助 括号匹配问题源代码
<P>括号匹配问题<在vc++环境><BR>问假设一个算术表达式种可包含三种括号:<BR>圆括号,方括号和花括号且三种括号可按任意次序嵌套使用.<BR>试利用栈的运算编写判别给定表达中所含括号是否正确匹配对出现的算法,并能指示出错的位置.<BR></P><P>请高手帮帮忙啊!下星期就交了.[em08]</P>
<P> void DestroyStack(SqStack *S)<BR> { /* 销毁栈S,S不再存在 */<BR> free((*S).base);<BR> (*S).base=NULL;<BR> (*S).top=NULL;<BR> (*S).stacksize=0;<BR> }</P>
<P> void ClearStack(SqStack *S)<BR> { /* 把S置为空栈 */<BR> (*S).top=(*S).base;<BR> }</P>
<P> Status StackEmpty(SqStack S)<BR> { /* 若栈S为空栈,则返回TRUE,否则返回FALSE */<BR> if(S.top==S.base)<BR> return TRUE;<BR> else<BR> return FALSE;<BR> }</P>
<P> int StackLength(SqStack S)<BR> { /* 返回S的元素个数,即栈的长度 */<BR> return S.top-S.base;<BR> }</P>
<P> Status GetTop(SqStack S,SElemType *e)<BR> { /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */<BR> if(S.top>S.base)<BR> {<BR> *e=*(S.top-1);<BR> return OK;<BR> }<BR> else<BR> return ERROR;<BR> }</P>
<P> void Push(SqStack *S,SElemType e)<BR> { /* 插入元素e为新的栈顶元素 */<BR> if((*S).top-(*S).base>=(*S).stacksize) /* 栈满,追加存储空间 */<BR> {<BR> (*S).base=(SElemType *)realloc((*S).base,((*S).stacksize+STACK_INCREMENT)*sizeof(SElemType));<BR> if(!(*S).base)<BR> exit(OVERFLOW); /* 存储分配失败 */<BR> (*S).top=(*S).base+(*S).stacksize;<BR> (*S).stacksize+=STACK_INCREMENT;<BR> }<BR> *((*S).top)++=e;<BR> }</P>
<P> Status Pop(SqStack *S,SElemType *e)<BR> { /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */<BR> if((*S).top==(*S).base)<BR> return ERROR;<BR> *e=*--(*S).top;<BR> return OK;<BR> }</P>
<P> void StackTraverse(SqStack S,void(*visit)(SElemType))<BR> { /* 从栈底到栈顶依次对栈中每个元素调用函数visit() */<BR> while(S.top>S.base)<BR> visit(*S.base++);<BR> printf("\n");<BR> }<BR> void check()<BR> { /* 对于输入的任意一个字符串,检验括号是否配对 */<BR> SqStack s;<BR> SElemType ch[80],*p,e;<BR> InitStack(&s); /* 初始化栈成功 */<BR> printf("Please putinto your(()、[]和{})biaodashi\n");<BR> gets(ch);<BR> p=ch; /* p指向字符串的首字符 */<BR> while(*p) /* 没到串尾 */<BR> switch(*p)<BR> {<BR> case '(':<BR> case '[':<BR> case '{':Push(&s,*p++); /* 左括号入栈,且p++ */<BR> break;<BR> case ')':<BR> case ']':<BR> case '}':if(!StackEmpty(s)) /* 栈不空 */<BR> {<BR> Pop(&s,&e); /* 弹出栈顶元素 */<BR> if(!(e=='('&&*p==')'||e=='['&&*p==']'||e=='{'&&*p=='}'))<BR> { /* 出现3种匹配情况之外的情况 */<BR> printf("left kuohao!=right\n");<BR> exit(ERROR);<BR> }<BR> }<BR> else /* 栈空 */<BR> {<BR> printf("lose left's kuohao\n");<BR> exit(ERROR);<BR> }<BR> default: p++; /* 其它字符不处理,指针向后移 */<BR> }<BR> if(StackEmpty(s)) /* 字符串结束时栈空 */<BR> printf("right!\n");<BR> else<BR> printf("Sorry,it's wrong!\n");<BR> }</P>
<P> void main()<BR> {<BR> check();<BR> }</P> ai,这简单的东西也要别人编 <P>有没有用vc++做的?<BR>我急啊!</P> 对不起啊,我只学了C语言.不会C++,我想只是细节上的问题.你改一下.
页:
[1]

