外道 发表于 2013-11-1 14:15:46

数据结构 顺序栈使用出错,求大神

#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例中出现三例内存引用无效,四例正确,这是怎么回事


外道 发表于 2013-11-3 12:56:51

继续求助,没人看吗
页: [1]
查看完整版本: 数据结构 顺序栈使用出错,求大神