分享
 
 
 

关于中缀表达转后缀表达一题我的做法及思想

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

今天做了一题的题目是这样的:假设表达式由单子母变量和双目四则运算算法构成。试写一算法,将以通常书写形式且书写正确的表达式转换为逆波兰式。

下面是我做这题的思想以及具体程序,不知道大家觉得这样做好不好,我是用递归做的.

/*思想:

1.第一个字符肯定先放到新数组.

2.假如碰到'*',或者'/'的话就先把这个符号后面的那个字符放入新数组,然后再将符号压进去.

3.假如碰到'+','-'的话,假如下一个符号的优先级和它们一样就用同上的方法,假如后面符号的优先级比它们

高的话就用for循环来查找下一个与它们优先级一样的符号.假如查到的话在完成后面的符号全都放入新数组后就把这个符号放入新数组,然后再执行后面的递归.假如前面没查到相同优先级符号的话就把后面的符号都放入新数组后再把这个符号放进去.做这一步中因为牵涉到后面'*','/'符号都放入后要回到原来的位置,所以就用了个yes变量来判定是否碰到这种要返回的情况,假如yes=1,就表示有这种情况,有些地方需要非凡判定.

4.假如要再加入括号的话我觉得可以再用一个类似yes类型的变量就可以完成.

*/

#define N 80

int i=0,yes=0;/*i是新数组的下标指示,yes变量用来判定'+','-'后面假如有'*','/'的情况*/

void Input(char *x);/*输入表达式*/

void Output(char *x);/*输出逆波兰*/

int Fun(char *x,char *y,int n);/*递归函数*/

void main(void)

{

char x[N],y[N];

Input(x);

Fun(x,y,1);

Output(y);

}

int Fun(char *x,char *y,int n)/*递归函数*/

{int j;

if(x[n]=='\0')/*递归到了结束运算符*/

{

y[n]='\0';

return;

}

if(n==1)/*第一次递归把第一个元素放入新数组*/

y[i++]=x[0];

if(x[n]=='*'x[n]=='/')/*乘除号的判定*/

{

y[i++]=x[n+1];

y[i++]=x[n];

if(yes&&(x[n+2]=='+'x[n+2]=='-'))/*这里两句if是用来判定yes存在的情况下的*/

{yes=0;return;}

if(yes&&x[n+2]=='\0')

return;

Fun(x,y,n+2);

}

else if(x[n]=='+'x[n]=='-')/*加减号的判定*/

{

if(x[n+2]!='*'&&x[n+2]!='/')/*直接放入新表达式的情况*/

{

y[i++]=x[n+1];

y[i++]=x[n];

Fun(x,y,n+2);

}

else/*后面有乘除号的情况*/

{

yes=1;

y[i++]=x[n+1];

for(j=n+2;;j+=2)

{

if(x[j]=='\0'x[j]=='+'x[j]=='-')

break;

}

if(x[j]=='\0')/*后面的乘除直接到表达式结束的情况*/

{

Fun(x,y,n+2);

y[i++]=x[n];

y[i]='\0';

yes=0;

}

else/*后面还有加减号的情况*/

{

Fun(x,y,n+2);

y[i++]=x[n];

yes=0;

Fun(x,y,j);

}

}

}

}

void Input(char *x)/*输入中缀表达式*/

{

clrscr();

printf("please input: ");

gets(x);

}

void Output(char *x)/*输出转换后的后缀表达式*/

{

printf("Now: ");

puts(x);

getch();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有