在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

数据结构习题

以下是题的全部代码,如何补充并调试完成,就是用栈进行表达式求值,参考书籍数据结构(c语言版)



文件名:ExpressionFunc.cpp

#include
#include
#include
#include


#include "ExpressionFunc.h"
////////////////////////
//表达式的项
struct SExpItem
{
    int                m_itemType;
    int                m_operatorType;//操作符类型
    double            m_itemValue;
};
////////////////////////
/*
功能:
    初始化算术表达式
参数:
    pExp:算术表达式
返回:
    0:正确
    其它:错误
*/   
int ExpressionInit(struct SExpression *pExp)
{
    if ( pExp==NULL )
        return 200;

    memset(pExp, 0x00, sizeof(struct SExpression));  //memset 对数组中每一个元素赋相同的值   memset(数组名,值,sizeof(数组名))
    pExp->m_value = 0.0;//访问结构体有两种方法  一种是“ . ” 和“ -> ”操作
    return 0;
}

/*
功能:
    计算算术表达式的值
参数:
    pExp:算术表达式
        算术表达式由操作符、操作数组成
        操作符:负-、加+、减-、乘*、除/、左括号(、右括号)
        操作数:0--9和小数点组成的整数和小数
返回:
    0:正确,算术表达式的值在pExp->m_value中
    其它:错误
*/   
int ExpressionEvaluate(struct SExpression *pExp)
{

    while ( 1==1 )
    {
        //获开一个表达式项

        //得到的是操作数:操作数处理

        //得到的是操作符或结束符:操作符、结束符处理
        
        
    } //while 1==1

    return 100;
}

//////////////////////////

文件名:ExpressionMain.cpp

#include
#include
#include

#include "ExpressionFunc.h"

char            *g_validChars="0123456789.+-*/()";


int main()
{
    struct SExpression    exp;
    int                    ret, ii, jj, nn, mm;//ret为表达式的值,ii为下标,nn为表达式的长度,jj为表达式中每个字符串的下标,mm为有效表达式的长度

    while ( 1==1 )
    {
        // 20.6-5*(3.5-1.0)
        // (3+2)*5-10.8
        // (((-3.8)))
        // (((3.2)))
        // (((-3+5)))
        // -3+5.7
        // -3
        // -(3+7.6)*6
        // (3.5+2.5)*(3.5-2.5)
        // 3*(-5-8)
        // (-5-8)*3
        // (2+3*3-1+4)

        //scanf()不允许表达式中有空格
        ExpressionInit(&exp);
        printf("expression = ");
        scanf("%s", exp.m_expStr);
        //截断
        exp.m_expStr[MAX_EXPRESSION_LENGTH-2]=0x00;

        //结束程序?
        nn=strlen(exp.m_expStr);
        if ( nn

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与2

OneHPUkihtonercoder。。#include"stdio.h"#include"stdlib.h"#include"string.h"#include"math.h"#definetrue1#definefalse0#defineOPSETSIZE8typedefintStatus;unsignedcharPrior[8][8]={//运算符优先级表//'+''-''*''/''('')''#''^'/*'+'*/'>','>','','','>','>','','>','','>','>','>','','>','',/*'#'*/''};typedefstructStackChar{charc;structStackChar*next;}SC;//StackChar类型的结点SCtypedefstructStackFloat{floatf;structStackFloat*next;}SF;//StackFloat类型的结点SFSC*Push(SC*s,charc)//SC类型的指针Push,返回p{SC*p=(SC*)malloc(sizeof(SC));p->c=c;p->next=s;returnp;}SF*Push(SF*s,floatf)//SF类型的指针Push,返回p{SF*p=(SF*)malloc(sizeof(SF));p->f=f;p->next=s;returnp;}SC*Pop(SC*s)//SC类型的指针Pop{SC*q=s;s=s->next;free(q);returns;}SF*Pop(SF*s)//SF类型的指针Pop{SF*q=s;s=s->next;free(q);returns;}floatOperate(floata,unsignedchartheta,floatb)//计算函数Operate{switch(theta){case'+':returna+b;case'-':returna-b;case'*':returna*b;case'/':returna/b;case'^':returnpow(a,b);default:return0;}}charOPSET[OPSETSIZE]={'+','-','*','/','(',')','#','^'};StatusIn(charTest,char*TestOp){intFind=false;for(inti=0;ic,*c)){case''://退栈并将运算结果入栈theta=OPTR->c;OPTR=Pop(OPTR);b=OPND->f;OPND=Pop(OPND);a=OPND->f;OPND=Pop(OPND);OPND=Push(OPND,Operate(a,theta,b));break;}//switch}}//whilereturnOPND->f;}//EvaluateExpressionintmain(void){chars[128];puts("请输入表达式:");gets(s);puts("该表达式的值为:");printf("%s\b=%g\n",s,EvaluateExpression(s));system("pause");return0;}

使用道具 举报

作业自己写吧

使用道具 举报

发新帖
国内首家创新型IT技术需求众包服务平台,软件需求就上天盟网! 立即登录 立即注册