主题:程序通过,得不出结果,大家帮忙看一下吧
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
//------栈的顺序存储表示------------
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{int *base;
int *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//构造一个空栈
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base) return ERROR;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status push(SqStack &s,char e)
{//插入e为新的栈顶元素
if(s.top-s.base>=s.stacksize)
{s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
if(!s.base) return ERROR;
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return OK;
}
Status pop(SqStack &s,char &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回炽OK;否则返回ERROR
if(s.base==s.top) return ERROR;
e=*--s.top;
return OK;
}
Status StackEmpty(SqStack s)
{if(s.base==s.top) return 1;
else return 0;
}
Status GetTop(SqStack s,char e)
{//若栈不空,则用e返回s的栈顶元素,并返回OK,否则返回ERROR
if(s.top==s.base) return ERROR;
e=*(s.top-1);
return(e);
}
Status mathing()
{char c[100],ch1,ch2,e; int i; SqStack s;
printf("请输入包括括号的表达式:");
scanf("%s",c);
i=0;
while(ch1=c[i++])
{switch (ch1)
{case '[':
case '(': push(s,ch1);break;
case ']': if(StackEmpty(s)) {printf("不匹配,右括号多了!"); return ERROR;}
GetTop(s,ch2);
if(ch2=='[') pop(s,e);
else { printf("左右括号不匹配!"); return ERROR;} break;
case ')':if(StackEmpty(s)) {printf("不匹配,右括号多了!"); return ERROR;}
GetTop(s,ch2);
if(ch2=='(') pop(s,e);
else{ printf("左右括号不匹配!"); return ERROR;} break;}
}
if(!StackEmpty(s)) {printf("不匹配,左括号多了!");return ERROR;}
printf("括号匹配");return OK;
}
main()
{
mathing();
printf("\n");
}
调试通过了,但得不出正确的结果不知什么原因?大家帮忙看一下
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
//------栈的顺序存储表示------------
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{int *base;
int *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//构造一个空栈
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base) return ERROR;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status push(SqStack &s,char e)
{//插入e为新的栈顶元素
if(s.top-s.base>=s.stacksize)
{s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
if(!s.base) return ERROR;
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return OK;
}
Status pop(SqStack &s,char &e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回炽OK;否则返回ERROR
if(s.base==s.top) return ERROR;
e=*--s.top;
return OK;
}
Status StackEmpty(SqStack s)
{if(s.base==s.top) return 1;
else return 0;
}
Status GetTop(SqStack s,char e)
{//若栈不空,则用e返回s的栈顶元素,并返回OK,否则返回ERROR
if(s.top==s.base) return ERROR;
e=*(s.top-1);
return(e);
}
Status mathing()
{char c[100],ch1,ch2,e; int i; SqStack s;
printf("请输入包括括号的表达式:");
scanf("%s",c);
i=0;
while(ch1=c[i++])
{switch (ch1)
{case '[':
case '(': push(s,ch1);break;
case ']': if(StackEmpty(s)) {printf("不匹配,右括号多了!"); return ERROR;}
GetTop(s,ch2);
if(ch2=='[') pop(s,e);
else { printf("左右括号不匹配!"); return ERROR;} break;
case ')':if(StackEmpty(s)) {printf("不匹配,右括号多了!"); return ERROR;}
GetTop(s,ch2);
if(ch2=='(') pop(s,e);
else{ printf("左右括号不匹配!"); return ERROR;} break;}
}
if(!StackEmpty(s)) {printf("不匹配,左括号多了!");return ERROR;}
printf("括号匹配");return OK;
}
main()
{
mathing();
printf("\n");
}
调试通过了,但得不出正确的结果不知什么原因?大家帮忙看一下