用栈解决括号匹配的问题,求助
我写完之后,没有提示错误,但是遇到实际输入就会报错,求助,谢谢,不胜感激#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
typedef int Status;
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
void InitStack(sqStack *s)
{
s->base = (ElemType)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if( !s->base )
{
exit(0);
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
void Push(sqStack *s, ElemType e)
{
if( s->top - s->base >= s->stackSize )
{
s->base = (ElemType)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));
if( !s->base )
{
exit(0);
}
}
*(s->top) = e;
s->top++;
}
void Pop(sqStack *s)
{
if( s->top == s->base )
{
return;
}
s->top--;
}
int SrackEmpty(sqStack *s) // 判断空栈
{
return(s->top==0);
}
void Gettop(sqStack *s,ElemType *e)
{
*e = *--(s->top);
s->top++;
}
Status CheckBrackts(char *expr)
{
int i;
char c;
sqStack s;
InitStack(&s);
for( i=0; expr!='\0'; i++)
{
if( expr=='(' || expr=='[' || expr=='{' )
Push(&s, expr); // 遇见左括号,就压入栈中
else if( expr==')' || expr==']' || expr=='}' ) // 遇见右括号,匹配
{
if( SrackEmpty(&s) )
return ERROR;
else
{
Gettop(&s, &c); // 读取栈顶元素,匹配括号
switch( expr )
{
case')':if( c!='(' )
return ERROR;
break;
case']':if( c!='[' )
return ERROR;
break;
case'}':if( c!='{' )
return ERROR;
break;
}
Pop(&s); // 栈顶指针下移
}
}
}
if( SrackEmpty(&s) )
return OK;
else return ERROR;
}
int main()
{
char expr;
gets(expr);
if( CheckBrackts(&expr) )
printf("yes");
else
printf("no");
return 0;
}
代码查错要自己来,没人能帮你的~
给个对照:http://bbs.fishc.com/forum.php?mod=viewthread&tid=46101&ctid=184 ~风介~ 发表于 2015-11-23 19:40
代码查错要自己来,没人能帮你的~
给个对照:http://bbs.fishc.com/forum.php?mod=viewthread&tid=46101&c ...
谢谢。我已更正好了:lol: 不要犯二 发表于 2015-11-23 22:56
我写过。。。源码不知道有没有了
我更正好了 。。。估计是设置的问题 1748504919 发表于 2015-12-5 15:11
。。。估计是设置的问题
是一点儿小问题,出现warming,解决就好了 不要犯二 发表于 2015-11-23 22:56
**** 作者被禁止或删除 内容自动屏蔽 ****
~~~~~~~
页:
[1]