有关数据结构的编程题目

问题描述

有关数据结构的编程题目
4-1 Evaluate Postfix Expression (10分)
Write a program to evaluate a postfix expression. You only have to handle four kinds of operators: + - x and /.

我的代码如下,但还是有一个测试点没有过,求大神们帮忙~急急急~~~:

#include
#include
#include
typedef double ElementType;
#define Infinity 1e8
#define Max_Expr 30 /* max size of expression */

ElementType EvalPostfix( char *expr );

int main()
{
ElementType v;
char expr[Max_Expr];
gets(expr);
v = EvalPostfix( expr );
if ( v<Infinity )
printf(""%f
"" v);
else
printf(""ERROR
"");
return 0;
}

ElementType EvalPostfix( char *expr )
{
ElementType Final_v; //存储最后要返回的值
ElementType value; //存储中间的部分产物
ElementType num=0.0;
int i=-1flag=1;

typedef struct StackRecord *Stack;struct StackRecord  {   int Capacity;       /* maximum size of the stack array */   int Top;   ElementType *Array; /* space for the two stacks */};Stack S;S=(Stack)malloc(sizeof(struct StackRecord));if(S==NULL)    printf(""Out of space!"");S->Array=( ElementType *)malloc(sizeof(ElementType)*30);S->Top=-1;                                 //创建一个空栈while(((*expr)>47&&(*expr)<58)||(*expr)=='-'||(*expr)=='.'){    while((*expr)!=' '&&(*expr!=0)){        if((*expr)=='-'){            flag=0;                                //若检测到负号,flag变为0            expr++;           if((*expr)<48||(*expr)>57) {                           //说明‘-’是减号而非负号            expr--;            flag=1;            if((*(expr+1))<48||(*(expr+1))>57)                  //'-'后面跟了非数字的符号                return Infinity;            goto B;           }        }        if((*expr)!='.')                            //整数部分的计算            num=num*10+(int)((*expr)-48);        else if((*expr)!='-'){                   //小数部分计算            expr++;            num=num+((int)(*expr)-48)*pow(10.0i--);        //从“.”的后面那个数开始        }        expr++;        }    if(flag)        S->Array[++S->Top]=num;    else        S->Array[++S->Top]=num*(-1);    flag=1;    num=0.0;    expr++;                                     //任何操作数、操作符之间都有一个空格}if(S->Top<1){                             //前两个一定是数字而非操作符    if(S->Top==0)        return S->Array[S->Top];    else        return Infinity;//not a legal postfix expression}flag=1;

while((*expr)!=NULL){ //在第一次,遇到的一定是运算符
B: switch (*expr){
case '+':
value=S->Array[S->Top--];
value+=S->Array[S->Top--];
expr++;
if((*expr)==NULL)
goto A;
expr++; //加两次,跳过空格
if((*expr)==NULL)
goto A;
break;

case '-':    value=S->Array[S->Top--];    value=S->Array[S->Top--]-value;    expr++;    if((*expr)==NULL)        goto A;    expr++;    if((*expr)==NULL)        goto A;    break;case '*':    value=S->Array[S->Top--];    value*=S->Array[S->Top--];    expr++;    if((*expr)==NULL)        goto A;    expr++;    if((*expr)==NULL)        goto A;    break;case '/':    if(S->Array[S->Top]==0)        return Infinity;//not a legal postfix expression    value=S->Array[S->Top--];    value=S->Array[S->Top--]/value;    expr++;    if((*expr)==NULL)        goto A;    expr++;    if((*expr)==NULL)        goto A;    break;default:    return Infinity;//not a legal postfix expression}//push:

A: S->Array[++S->Top]=value; //将过程中产生的结果压入栈
if((*expr)==NULL)
break;

//Push:while(((*expr)>47&&(*expr)<58)||((*expr)=='-'&&(*(expr+1)>47&&*(expr+1)<58))||(*expr)=='.'){    while((*expr)!=' '){        if((*expr)=='-'){            flag=0;                                          //若检测到负号,flag变为0            expr++;           if((*expr)==' ') {                            //说明‘-’是减号而非负号            expr--;            flag=1;            goto B;           }        }        if((*expr)!='.')                                              //整数部分的计算            num=num*10+(int)((*expr)-48);        else                                                           //小数部分计算            num=num+((int)(*expr++)-48)*pow(10.0i--);        //从“.”的后面那个数开始        expr++;        }    if(flag)        S->Array[++S->Top]=num;    else        S->Array[++S->Top]=num*(-1);    num=0.0;    expr++;                                 //任何操作数、操作符之间都有一个空格}

}
if(S->Top!=0)
return Infinity;
else{

Final_v=S->Array[S->Top]; return Final_v;

}
}

解决方案

数据结构题目
关于数据结构的题目

解决方案二:
为什么显示会是这样……

时间: 2024-07-29 05:07:42

有关数据结构的编程题目的相关文章

数据结构一道编程题目

问题描述 数据结构一道编程题目 http://acm.buaa.edu.cn/contest/195/problem/H-%E9%9A%BE%E9%A2%98(10)/![图片](http://img.ask.csdn.net/upload/201506/21/1434818441_289810.png) 解决方案 无法访问你给的链接...

问一道编程题目,大家帮忙看下谢了

问题描述 问一道编程题目,大家帮忙看下谢了 拼点游戏 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 C和S两位同学一起玩拼点游戏.有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数.C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两人各出一张卡牌,点数大者获得三颗巧克力,小者获得一颗巧克力,如果点数相同,每人各得二颗巧克力,使用过的卡牌不得重复使用.已知C和S取到的卡牌点数,请编程计算S最多和最少能得到多少颗巧克力. 输入 输

acm的c语言扫雷编程题目,求大神指点

问题描述 acm的c语言扫雷编程题目,求大神指点 解决方案 这是输出的部分,待会附上我的代码 解决方案二: 你是要找人代写,还是说代码需要debug? 解决方案三: 这是哪个acm平台呀,这个算法应该就是算临域,完后计数加加的吧 解决方案四: 问题出在最后和标准差个空格 #include #include #include int main(){ int c,b,i,j; int x=1; char a[1000][1000]; while(scanf("%d%d",&c,&a

c++问题-c++编程题目n阶奇数魔方

问题描述 c++编程题目n阶奇数魔方 输入阶数n编程实现使每一行每一列每条对角线相加和相同n*n的方格,填1-n*n的数字. 解决方案 http://www.csoeasy.com/3128.html 解决方案二: n阶魔方n阶魔方奇数阶魔方

一个java编程题目,类的设计问题

问题描述 今天去面试,得到的题目是:1.从一个文档中读取内容(文档内容为1-10十个数字,一个数字一行),输出到另外一个文档,输出格式为(1,2,3,...,10)2.数据库中存储了10条记录,一列,也是1-10,一个数字一条记录,读出,也输出到一个文档,格式同第一题.题目的要求是:怎么样设计类,使在开发过程中第一题变到第二题的修改部分较少,代码复用率低.附加:如果是输出到文档,改为输出到数据库的话,怎么设计. 学得不精,只想到了用继承来解决这个问题.还有什么别的设计思路呢? 解决方案 publ

c语言编程-java题目和C语言题目,面试题目,急用

问题描述 java题目和C语言题目,面试题目,急用 竞赛编程题目"> 解决方案 c语言面试题目C语言面试题目关于C语言的题目 解决方案二: 这么多,,,还是找同学助攻吧 解决方案三: 这么多,,,还是找同学助攻吧 解决方案四: 都看不清,兄弟,你这都不会,到时工作也没法进行啊 解决方案五: 参考一下这个去找找 http://www.doc88.com/p-3601057756733.html 解决方案六: 2015Java软件开发工程师面试题宝典 几百道常用题及答案 http://www.

c++ delphi 回调函数-一个数据结构的题目,涉及Hash、双链表、回调函数等,求大神指教?

问题描述 一个数据结构的题目,涉及Hash.双链表.回调函数等,求大神指教? 数据结构相关的题目描述 typedef?struct?_FILE_NODE?{ _FILE_NODE?*Prev; _FILE_NODE?*Next; WCHAR?wzFileName[MAX_PATH]; DWORD?dwLowDateTimeLastWrite; }?FILE_NODE,?*LPFILENODE; 实现两个项目: 一.DLL 1.实现文件遍历的功能 2.导出接口中,可由用户指定遍历哪个文件夹 3.提

树-数据结构在c++编程时候的作用

问题描述 数据结构在c++编程时候的作用 最近在看基于c++的数据结构,尤其看到树,实在不太理解树这些对于c++编程有什么作用,或者说他们的联系,或者说数据结构对于编程的意义,因为不是计算机专业,所以总觉得有一种门外汉的感觉,希望大牛们能指点一二,能推荐上一两本比较好的数据结构书更好,谢谢啦! 解决方案 建议还是学一下数据结构.虽然实际工作中去实现基本的数据结构与算法的不太现实,但知其然知其所以然,更能写出优质代码. 书的话选本经典的C++,JAVA实现的数据结构书就行. 解决方案二: 没有学过

编程c语言-c语言课设考试题目,求大神们帮忙

问题描述 c语言课设考试题目,求大神们帮忙 各位兄弟们能不能帮帮忙,课设考试.竞赛编程题目">