麻烦高手帮我看看这个程序是哪儿出问题了啊,运行即崩溃,这是个栈实现括号匹配的程序

#include<stdio.h>#include<malloc.h>#include<stdlib.h>#defineMAX20typedefcharelemtype;... #include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX 20
typedef char elemtype;
typedef struct stack
{
elemtype *base;
elemtype *top;
int size;
}stack;
int initstack(stack * s)
{
(*s).base=(elemtype *)malloc(MAX*sizeof(elemtype));
if((*s).base=NULL)
return-1;
return 0;
(*s).top=(*s).base;
(*s).size=MAX;
}
int emptystack(stack *s)
{
if(s->base==s->top)
return 1;
return 0;
}

void pushstack(stack *s,elemtype *e)
{
if(s->top-s->base==MAX)

printf("栈已满");
*(++(s->top))=*e;
}
void pupstack(stack *s,elemtype *e)
{
if(s->top==s->base)
printf("栈为空");
*e=*(s->top);
s->top=s->top-1;
}
void checkstack( stack *s)
{
elemtype ch[50],*e,*a;
printf("请输入表达式:");
gets(ch);
a=&ch;
while(*a)
{
switch(*a)
{
case '(':
case '[':
case '{': pushstack(s,*a);a++;break;
case ')':
case ']':
case '}':if(!emptystack(s))
{
pupstack(s,e);
if(*e=='('&&(*a)==')'||*e=='['&&(*a)==']'||*e=='{'&&(*a)=='}')
{

a++;
break;
}
else
{
printf("左右括号不匹配");
return;
}
}
else{
printf("缺乏左括号");
return;
}
default: a++;
}
}
if(emptystack(s))
printf("字符串匹配\n");
else
printf("字符串不匹配\n");
}

void main()
{
stack * s;
initstack(s);
checkstack(s);
system("pause");
}
展开
 我来答
kingfeng588
推荐于2016-11-14 · TA获得超过2494个赞
知道大有可为答主
回答量:1475
采纳率:50%
帮助的人:1809万
展开全部
stack * s;中的指针没有分配内存,但是你却在函数中访问成员变量,所以错误。

int initstack(stack * s)
{
(*s).base=(elemtype *)malloc(MAX*sizeof(elemtype));// 这里为成员变量分配内存,此时s自己都没有分配内存。所以访问异常。

修改后:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX 20
typedef char elemtype;
typedef struct stack
{
elemtype *base;
elemtype *top;
int size;
}stack;
int initstack(stack * s)
{
(*s).base=(elemtype *)malloc(MAX*sizeof(elemtype));
if((*s).base=NULL)
return-1;
return 0;
(*s).top=(*s).base;
(*s).size=MAX;
}
int emptystack(stack *s)
{
if(s->base==s->top)
return 1;
return 0;
}
void pushstack(stack *s,elemtype *e)
{
if(s->top-s->base==MAX)

printf("栈已满");
*(++(s->top))=*e;
}
void pupstack(stack *s,elemtype *e)
{
if(s->top==s->base)
printf("栈为空");
*e=*(s->top);
s->top=s->top-1;
}
void checkstack( stack *s)
{
elemtype ch[50],*e,*a;
printf("请输入表达式:");
gets(ch);
a=ch;//
while(*a)
{
switch(*a)
{
case '(':
case '[':
case '{':
pushstack(s,a);
a++;
break;
case ')':
case ']':
case '}':
if(!emptystack(s))
{
pupstack(s,e);
if(*e=='('&&(*a)==')'||*e=='['&&(*a)==']'||*e=='{'&&(*a)=='}')
{

a++;
break;
}
else
{
printf("左右括号不匹配");
return;
}
}
else{
printf("缺乏左括号");
return;
}
default: a++;
}
}
if(emptystack(s))
printf("字符串匹配\n");
else
printf("字符串不匹配\n");
}
void main()
{
stack *s = (stack*)malloc(sizeof(stack));
initstack(s);
checkstack(s);
system("pause");
delete s;
}
更多追问追答
追问
我这个程序运行,无论输入表达式正确错误,他返回的结果都是字符串不匹配,麻烦能不能帮我看看算法有什么问题么
追答
修改后:
#include
#include
#include
#define MAX 20
typedef char elemtype;
typedef struct stack
{
elemtype *base;
elemtype *top;
int size;
}stack;
int initstack(stack * s)
{
(*s).base=(elemtype *)malloc(MAX*sizeof(elemtype));
if((*s).base==NULL)
return-1;
(*s).top=(*s).base;
(*s).size=MAX;
return 0;
}
int emptystack(stack *s)
{
if(s->base==s->top)
return 1;
return 0;
}
void pushstack(stack *s,elemtype *e)
{
if(s->top-s->base==MAX)

printf("栈已满");
*(++(s->top))=*e;
}
void pupstack(stack *s,elemtype *e)
{
if(s->top==s->base)
printf("栈为空");
*e=*(s->top);
s->top=s->top-1;
}
void checkstack( stack *s)
{
elemtype ch[50],e,*a;
printf("请输入表达式:");
gets(ch);
a=ch;//
while(*a)
{
switch(*a)
{
case '(':
case '[':
case '{':
pushstack(s,a);
a++;
break;
case ')':
case ']':
case '}':
if(!emptystack(s))
{
pupstack(s,&e);
if(e=='('&&(*a)==')'||e=='['&&(*a)==']'||e=='{'&&(*a)=='}')
{

a++;
break;
}
else
{
printf("左右括号不匹配");
return;
}
}
else{
printf("缺乏左括号");
return;
}
default: a++;
}
}
if(emptystack(s))
printf("字符串匹配\n");
else
printf("字符串不匹配\n");
}
void main()
{
stack *s = (stack*)malloc(sizeof(stack));
initstack(s);
checkstack(s);
system("pause");
delete s;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
中智咨询
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。... 点击进入详情页
本回答由中智咨询提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式