标题:关于严蔚敏数据结构中求表达式的值的程序麻烦看一下哪错了
取消只看楼主
陈陆林520
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-3-9
结帖率:66.67%
已结贴  问题点数:4 回复次数:0 
关于严蔚敏数据结构中求表达式的值的程序麻烦看一下哪错了
#include<stdio.h>
#include<stdlib.h>
#define initsizement   100
#define  increasement  10
typedef  struct{
    float *base;
    float *top;
    int sizement;
}sqstack1;
typedef  struct{
    char *base;
    char *top;
    int  sizement;
}sqstack2;
int init1(sqstack1 &opnd)
{opnd.base=(float*)malloc(initsizement*sizeof(float));
if(!opnd.base)
return 0;
opnd.top=opnd.base;
opnd.sizement=initsizement;
return 1;
}
int push1(sqstack1& opnd,float e)
{if(opnd.top-opnd.base>=opnd.sizement)
{opnd.base=(float*)realloc(opnd.base,(opnd.sizement+increasement)*sizeof(float));
if(!opnd.base)
return 0;
opnd.top=opnd.base+opnd.sizement; //这里有问题
opnd.sizement=opnd.sizement+increasement;}
*opnd.top++=e;
return 1;
}
int pop1(sqstack1& opnd,float& e)
{ if(opnd.base==opnd.top)
return 0;
e=*--opnd.top;
return 1;
}
float gettop1(sqstack1 opnd)
{if(opnd.base==opnd.top)
exit(1);

 return (*(opnd.top-1));
}
int init2(sqstack2 &optr)
{optr.base=(char*)malloc(initsizement*sizeof(char));
if(!optr.base)
return 0;
optr.top=optr.base;
optr.sizement=initsizement;
return 1;
}
int push2(sqstack2& optr,char e)
{if(optr.top-optr.base>=optr.sizement)
{optr.base=(char*)realloc(optr.base,(optr.sizement+increasement)*sizeof(char));
if(!optr.base)
return 0;
optr.top=optr.base+optr.sizement; //这里有问题
optr.sizement=optr.sizement+increasement;}
*optr.top++=e;
return 1;
}
int pop2(sqstack2& optr,char& e)
{ if(optr.base==optr.top)
return 0;
e=*--optr.top;
return 1;
}
char gettop2(sqstack2 optr)
{if(optr.base==optr.top)
exit(1);

 return *(optr.top-1);
}
int in(char c)
{if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')')
return 1;
else
return 0;
}
float operate(float a,char theta,float b)
{float c;
    switch(theta)
{case '+':
c=a+b;
break;
case '-':
c=a-b;
break;
case '*':
c=a*b;
break;
case  '/':
c=a/b;
break;}
    return c;
}
char precede(char a,char b)
{int i,j;
    char p[8][8]={{' ','+','-','*','/','(',')','#'},{'+','>','>','<','<','<','>','>'},{'-','>','>','<','<','<','>','>'},{'*','>','>','>','>','<','>','>'},
{'/','>','>','>','>','<','>','>'},{'(','<','<','<','<','<','=',' '},{')','>','>','>','>',' ','>','>'},{'#','<','<','<','<','<',' ','='}};
for(i=0;i<8;i++)
{if(p[i][0]==a)
break;}
for(j=0;j<8;j++)
{if(p[0][j]==b)
break;}
return p[i][j];}
float evaluateexpression(sqstack1 opnd,sqstack2 optr)
{ char c,theta,x;
float a,b,i;
push2(optr,'#');
c=getchar();
while(c!='#'||gettop2(optr)!='#')
{
    if(!in(c))
{i=float(c-48);
    push1(opnd,i);
c=getchar();}
else {

switch(precede(gettop2(optr),c))
{case '>':
    pop2(optr,theta);
    pop1(opnd,a);
    pop1(opnd,b);
    push1(opnd,operate(a,theta,b));
    break;
case '=':
pop2(optr,x);
c=getchar();
break;
case '<':
    push2(optr,c);
    c=getchar();
    break;}
}
}
return gettop1(opnd);
}
int main()
{float m;
    sqstack1 opnd;
  sqstack2 optr;
  init1(opnd);
  init2(optr);
  printf("请输入表达式\n");
  m=evaluateexpression(opnd,optr);
  printf("结果是 %f\n",m);
  return 0;
}

搜索更多相关主题的帖子: top include return 表达式 
2012-12-10 13:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-390489-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.457614 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved