数据结构 顺序栈使用出错,求大神
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define STACKINITSIZE 50
typedef struct
{
char * base;
char * top;
int stacksize;
}sqstack;
void Clearstack(sqstack *s)
{
s->top=s->base;
}
void InitStack(sqstack *s)
{
s->base=(char *)malloc(STACKINITSIZE*sizeof(char));
if(!s->base)
printf("adasa");
s->top=s->base;
}
void Push(sqstack * s,char a)
{
*s->top++=a;
}
void Pop(sqstack *s,char * a)
{
*a=*--s->top;
}
int youxianji(char a)
{
if(a=='^')
return 8;
if(a==')')
return 9;
if(a=='*'||a=='/')
return 7;
if(a=='+'||a=='-')
return 5;
if(a=='(');
return 3;
if(a=='#')
return 1;
}
void function(char *a,sqstack * s,int h)
{
char lin;//临时存放出战数据
*s->top='#';
s->top++; //处理前将‘#’入栈
int i,b;
for(i=0;i<h;i++)
{
b=i;
if(a!='+'&&a!='-'&&a!='*'&&a!='/'&&a!='('&&a!=')'&&a!='#'&&a!='^')
{printf("%c",a);continue;}
if(a=='(')
{ Push(s,a);continue;}
if(a=='#'&&*(s->top-1)!='#')
{
do
{Pop(s,&lin);
printf("%c",lin);
}
while(*(s->top-1)!='#');
break;
}
if(a==')')
{
do
{Pop(s,&lin);
printf("%c",lin);
}
while(*(s->top-1)!='(');
Pop(s,&lin);
continue;
}
/*asdadsd*/ if(youxianji(a)>youxianji(*(s->top-1))||a=='#')//若优先级大
Push(s,a);
else
{ do
{Pop(s,&lin);
printf("%c",lin);
}
while(youxianji(*(s->top-1))>=youxianji(a)) ;
Push(s,a);
}
}
}
int main()
{
char date;//为什么改大后 无效内存引用
sqstack S1;
InitStack(&S1);
int a,N,i;
scanf("%d",&N);
getchar();
for(i=0;i<N;i++)
{
scanf("%s",date);
a=strlen(date);
function(date,&S1,a);
printf("\n");
Clearstack(&S1);
}
for(i=0;i<N;i++)
{
;
}
system("pause");
return(0);
}
从中缀向后缀转换表达式,了简化编程实现,假定变量名均为单个字母,运算符只有+,-,*,/ 和^(指数运算),可以处理圆括号(),并假定输入的算术表达式正确。
要求:使用栈数据结构实现 ,输入的中缀表达式以#号结束
自己测试了多组数据均无错误,可是交上去测试时9例中出现三例内存引用无效,四例正确,这是怎么回事
继续求助,没人看吗
页:
[1]