• 大小: 11KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: C/C++
  • 标签:

资源简介

表达式求值的c语言版,能求出后缀,并根据后缀求表达式的值。仅供参考与交流

资源截图

代码片段和文件信息

#include
#include
#include
#define TRUE 1
#define FALSE 0
#define STACK_SIZE 30
char optr[7]={‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘#‘};
int cmp[7][7]={{3311133}{3311133}{3333 133}{3333 133}{1111120}{3333033}{1111102}};
//算符优先矩阵,3代表>2代表=,1代表<0代表不可比
typedef struct
{
char optr[STACK_SIZE];
int top;
}stack;//操作符栈
typedef struct
{
int opnd[STACK_SIZE];
int top;
}nstack;//操作数栈
void initstack(stack *s)//初始化运算符栈
{
s->top=-1;
};
void initstackn(nstack *s)//初始化操作数栈
{
s->top=-1;
}
int isempty(stack *s)//判断运算符栈是否为空,为空返回1
{
if(s->top==-1)return TRUE;
else return FALSE;
}
int isemptyn(nstack *s)//判断操作数栈是否为空,为空返回1
{
return(s->top==-1?TRUE:FALSE);
}
int isfull(stack *s)//判断运算符栈是否为满,为空返回1
{
return(s->top==(STACK_SIZE-1)?TRUE:FALSE);
}
int isfulln(nstack *s)//判断操作数栈是否为满,为空返回1

{
return(s->top==(STACK_SIZE-1)?TRUE:FALSE);
}
int push(stack *schar c)//运算符入栈
{
if(s->top==STACK_SIZE-1)
{
printf(“stack is full!\n“); 
return FALSE;
}
else 
{
s->top++;
s->optr[s->top]=c;
return TRUE;
}
}

int pushn(nstack *sint x)//操作数入栈
{
if(s->top==STACK_SIZE-1)
{
printf(“stack is full!\n“); 
return FALSE;
}
else 
{
s->top++;
s->opnd[s->top]=x;
return TRUE;
}
}
int pop(stack *schar *c)// 运算符出栈
{
if(s->top==-1)
{
printf(“stack is empty!\n“);
return FALSE;
}
else
{
*c=s->optr[s->top];
s->top--;
return TRUE;
}
}
int popn(nstack *sint *x)//操作数出栈
{
if(s->top==-1)
{
printf(“stack is empty!\n“);
return FALSE;
}
else
{
*x=s->opnd[s->top];
s->top--;
return TRUE;
}
}
char gettop(stack *s)//取操作符栈顶元素
{
if(s->top==-1)
{
printf(“stack is empty!\n“);
return FALSE;
}
else
{
return s->optr[s->top];
}
}
int gettopn(nstack *s)//取操作数栈顶元素
{
if(s->top==-1)
{
printf(“stack is empty!\n“);
return FALSE;
}
else
{
return s->opnd[s->top];
}
}
int isoptr(char ch)// 判断是否为运算符,是则返回1
{
int i;
for(i=0;i<7;i++)
{
if(optr[i]==ch)return TRUE;

}
return FALSE;
}
int compare(char ch1char ch2)//  运算符优先级比较
{
int imn;
for(i=0;i<7;i++)
{
if(ch1==optr[i])
m=i;
if(ch2==optr[i])
n=i;
}
return cmp[m][n];
}
int execute(int achar opint b)//运算函数
{
int result;
switch(op)
{
case‘+‘:
result=a+b;
break;
case‘-‘:
result=b-a;
break;
case‘*‘:
result=a*b;
break;
case‘/‘:
result=b/a;
break;
}
return result;
}
int expevalution()//读入表达式并求其值
{ int i=0tempabv;
char chop;
char *str;
stack optr;
nstack opnd;
initstack(&optr);
initstackn(&opnd);
push(&optr‘#‘);
printf(“请输入表达式(以#结束)\n“);
str=(char*)malloc(50*sizeof(char));
gets(str);
ch=str[i];
i++;
while(ch!=‘#‘||gettop(&optr)!=‘#‘)
{
if(!isoptr(ch))//字符转化为十进制数
{
temp=ch-‘0‘;
ch=str[i];
i++;
while(!isoptr(ch))
{
temp=temp*10+ch-‘0‘;
ch=str[i];

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4180  2009-10-10 23:58  DS-10010804-2008302503-明怀平\源程序\转化为后缀并求值.cpp

     文件       3783  2009-10-10 17:01  DS-10010804-2008302503-明怀平\源程序\中缀求值.cpp

     文件      61440  2009-10-11 00:31  DS-10010804-2008302503-明怀平\数据结构实验报告.doc

     目录          0  2009-10-11 00:32  DS-10010804-2008302503-明怀平\源程序

     目录          0  2009-10-11 00:33  DS-10010804-2008302503-明怀平

----------- ---------  ---------- -----  ----

                69403                    5


评论

共有 条评论

相关资源