| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2137 人关注过本帖
标题:[原创]中缀表达式变后缀! 要的进
只看楼主 加入收藏
wshingdc
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-3-30
收藏
 问题点数:0 回复次数:5 
[原创]中缀表达式变后缀! 要的进

#include <iostream.h>
#include <stdio.h>
#include <iomanip.h>
#include <stdlib.h>
class stack
{
private:
char *data;
int top;
int maxsize;

public:
//创建栈
void setstack(int n)
{data=new char[n];
if(data==NULL)
{cout<<" 超值\n";exit(1);}
maxsize=n;
top=-1;
};
//判断是否为空
bool stackempty()
{if(top==-1)
return true;
return false;
};
//判断是否为满
bool stackfull()
{if(top==maxsize-1)return true;
return false;
};
//读取栈顶元素
char peek()
{if(top==-1){cout<<" 栈已空";exit(1);}
return(data[top]);
};
//压入元素
void push(char item)
{if(top==maxsize-1){cout<<"栈已满";exit(1);}
top++;
data[top]=item;
};
//删除栈顶元素并返回其值
char pop()
{if(top==-1)
{cout<<"";exit(1);}
top--;
return data[top+1];
};

};



int pre(char op)//设置优先级
{switch(op)
{
case '+':
case '-':return 1;
case '*':
case '/':return 2;
case '(':
case '@':
default:return 0;
}
}
stack r;

void zhuanhuan(char s1[40],char s2[40])
{
stack r;
r.setstack(20);
r.push('@');//用@作为结束标志
int i=0,j=0;
char ch=s1[i];//把s[i]的第一个字符给ch
while(ch!='@')
{//顺序读取字符
if(ch==' ')
//对于空格,读下一字符
ch=s1[++i];
else if(ch=='(')
//对于左括号,直接压入栈
{
r.push(ch);
ch=s1[++i];
}
else if(ch==')')//对于右括号,把括号内的运算符依次出栈写入s2中
{
while(r.peek()!='(')
s2[j++]=r.pop();
r.pop();//删除左括号
ch=s1[++i];}
else if(ch=='+'||ch=='-'||ch=='*'||ch=='/')
{// 对于四则运算把栈中优先级不低于ch的运算符依次弹出写入s2中
char w=r.peek();
while(pre(w)>=pre(ch))
{s2[j++]=w;r.pop();w=r.peek();}
r.push(ch);//把运算符压入栈
ch=s1[++i];}
else//如果是数字直接写入s2
{s2[j++]=ch;
ch=s1[++i];
}//转换后放入一个空格
s2[j++]=' ';
}
//把暂时存在栈中的元素写入s2
ch=r.pop();
while(ch!='@')
{
if(ch=='('){cout<<"错误"<<endl;exit(1);}
else {s2[j++]=ch;
ch=r.pop();
}}
s2[j++]='@';
s2[j++]='\0';}
void main(void)
{

char w1[20],w2[20];
cout<<"输入表达式(少于20个且均为正整数,以@为结束标志)"<<endl;
gets(w1);
zhuanhuan(w1,w2);
printf("%s",w2);cin.get();

}


[flash]http://qqxp.b75.53dns.com/3m/16.swf[/flash]

[此贴子已经被作者于2006-4-5 22:16:24编辑过]

搜索更多相关主题的帖子: 后缀 include int top bool 
2006-04-05 22:06
wxlove
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-4-13
收藏
得分:0 
好使吗?
2006-04-22 17:22
lsx04
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-5-2
收藏
得分:0 

大家好~!有那位大侠的编程能力强啊!~帮帮忙做一个栈的综合演示-关于迷宫求解和表达式求值的(要求可动态显示数据的变化)
这也是我的毕业设计哦,要用c++做,希望那位朋友可以请教一下,谢谢!

2006-05-02 22:36
moving
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-7-31
收藏
得分:0 
有那位高手能告诉我前中后缀表达式的定义几格式,谢谢了!

2006-07-31 10:41
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
我们平常写的运算表达式就是中缀表达式。操作数的位置不变,由操作符与相应的操作数之间的位置关系划定。

中缀: 1*(2+3)-4/2# /* 运算符在操作数中间,#为结束字符,下同*/
后缀: 1 2 3 + * 4 2 / -# /*运算符在操作数后*/
前缀: * 1 + 2 3 - / 4 2# /*运算符在操作数前*/

倚天照海花无数,流水高山心自知。
2006-08-02 14:29
幸福的旁边
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-8-13
收藏
得分:0 
楼主有能求出知的中缀转后缀的c语言程序吗?

2006-08-13 20:41
快速回复:[原创]中缀表达式变后缀! 要的进
数据加载中...
 
   



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

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