| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2304 人关注过本帖
标题:请教怎么利用栈判定表达式是否后缀表达式!
只看楼主 加入收藏
quanfl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-6-27
收藏
 问题点数:0 回复次数:10 
请教怎么利用栈判定表达式是否后缀表达式!
请教怎么利用栈判定表达式是否后缀表达式!
搜索更多相关主题的帖子: 后缀 表达 
2006-06-27 16:58
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

是数据进数据栈,出现运算符号的时候两个数据出栈,结果数据进栈,这是用栈运算后缀表达式的方法
而判断的方法完全一样,只要保证最后栈中只有一个数据就可以,当然知道原理(栈的思想)不需要用栈,只要记录"栈"中数据的个数就可以


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2006-06-27 18:54
quanfl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-6-27
收藏
得分:0 
ok,知道了,谢谢!
那请问怎么用栈把后缀转成前缀,我只知道二叉数转换!
2006-06-27 19:42
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
不好意思,前缀表达式的定义不知道

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2006-06-28 07:26
quanfl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-6-27
收藏
得分:0 
哦,前缀表达式就是波兰式,就是把表达式写成二叉树,以运算符做根节点,前序遍历就是前缀表达式,后序遍历就是后缀表达式
2006-06-28 11:39
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

给你看代码吧,思想是把ab+转化到前缀显然很简单+ab就可以,当然a也可以是一个子表达式而不只是一个变量,那么我们可以利用栈来模拟后缀表达式的计算,与前面不同的是栈内存的运算结果不是数字,而是该表达式对应的前缀表达式,显然每次运算都是 ab+这种情况,其中a,b都已经是前缀表达式.

不过我觉得这么实现起来还是用树效率高.

#include <stdio.h>
#include <string.h>
#define SMAX 30
#define LMAX 512
char stack[SMAX][LMAX];
long s_top;

void trans(char c)
{
char tmp[LMAX];
tmp[0]=c;tmp[1]='\0';s_top--;
strcat(tmp,stack[s_top-1]);
strcat(tmp,stack[s_top]);
strcpy(stack[s_top-1],tmp);
}
void push(char c)
{
stack[s_top][0]=c;
stack[s_top][1]='\0';
s_top++;
}

#define Case1 case '+': case '-': case '*': case '/'
void translate(void)
{
char c;
s_top=0;
while(1){
c=getchar();
switch(c){
Case1 : trans(c); break;
case '\n': return ; break;
default : push(c); break;
}
}
}
int main()
{
printf("Please input the expression\n");
translate();
printf("The translated expression is:\n");
printf("%s\n",stack[0]);
getch();
return 0;
}


[此贴子已经被作者于2006-6-28 13:47:55编辑过]


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2006-06-28 13:45
quanfl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-6-27
收藏
得分:0 
太感谢了啊!!
2006-06-28 16:46
ffen
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-6-28
收藏
得分:0 

我的基础比较差,有些东西看不懂,能不能解释一下?谢谢!
strcat
strcpy
上面的函数作用!
还有能否把您的程序中的每个函数作用告诉我,我有点看不懂!

2006-06-28 17:05
ffen
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-6-28
收藏
得分:0 
strcat
strcpy
已经查到了。
2006-06-28 17:12
ffen
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-6-28
收藏
得分:0 

已经全弄清了,谢谢!

2006-06-28 18:02
快速回复:请教怎么利用栈判定表达式是否后缀表达式!
数据加载中...
 
   



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

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