麻烦高手帮我看看这个程序是哪儿出问题了啊,运行即崩溃,这是个栈实现括号匹配的程序
#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");
} 展开
#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");
} 展开
展开全部
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;
}
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 广告
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。...
点击进入详情页
本回答由中智咨询提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询