...出问题了啊,运行即崩溃,这是个栈实现括号匹配的程序
发布网友
发布时间:2024-09-28 09:11
我来回答
共1个回答
热心网友
时间:2024-10-04 19:34
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;
}