| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 523 人关注过本帖
标题:[求助]这个程序哪里不对劲
只看楼主 加入收藏
陈天明
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-1-6
收藏
 问题点数:0 回复次数:2 
[求助]这个程序哪里不对劲

#include <stdio.h>
#define maxnum 40
typedef struct
{
char stack[maxnum];
int top;
}qstype;
int pushqs(qstype S,char x) // 入栈
{
if(S->top>=maxnum-1)
return (0);
else
{
S->top++;
S->stack[S->top]=x;
return (1);

}
}
char popqs(qstype *S) //出栈
{
if(S->top<0)
return (0);
else
{
S->top--;
return (S->stack[S->top+1]);
}
}
char gettopqs (qstype S) //取栈顶元素
{
if(S.top<0)
return (0);
else
return(S.stack[S.top]);
}
int postfix(qstype *S,char a[]) //变中缀表达式为后缀表达式
{
char x1,x2,x;
int j=0;
char proceed();
S->stack[0]='#';
S->top=0;
x2=a[j];
x1=gettopqs(*S);
for(;;)
{
if(x2!='+' && x2!='-'&& x2!='*'&& x2!='/'&& x2!='('&& x2!=')'&& x2!='#')
{
printf("%c",x2); //输出操作符
j++;
x2=a[j]; //取下一个单词
}
else
if(proceed(x1,x2)=='<') //栈顶操作符x1小于读到的操作符x2
{
pushqs(S,x2); //将读到的操作符入栈
x1=gettopqs(*S); //更新x1的值为新入栈的操作符
j++;
x2=a[j]; //取下一个单词
}
else
if(proceed(x1,x2)=='>')
{
x=popqs(S); //退栈
printf("%c",x); //输出原栈顶操作符
}x1=gettopqs(*S); //更新x1的值
else if(proceed(x1,x2)=='='&& x1=='('&& x2==')') //去掉括号
{
popqs(S);
x1=gettopqs(*S);
j++;
x2=a[j];
}
else if(proceed(x1,x2)=='=' && x1=='#' && x2=='#')
return; //处理完毕
}
}
char proceed(char x1,char x2) //比较各个运算符的优先级
{
if(x1=='+'|| x1=='-')
x1='+';
if(x1=='*'|| x1=='/')
x1='*';
switch(x1)
{
case'+':
if(x2=='+' || x2=='-' || x2==')' || x2=='#')
return ('>');
return ('<');
case'*':
if(x2=='(')
return ('>');
return ('<');
case'(':
if(x2==')')
return ('=');
return ('<');
case')':
return('>');
case'#':
if(x2=='#')
return ('=');
return ('<');
default:
exit(0);
}
}
main()
{
qstype *s ;
int i=0;
char ch,a[maxnum];
int postfix();
printf(">");
while((ch=getchar())!=' ') //以'#'或' '结束
a[i++]=ch;
postfix(s,a);
printf("\n");
}


搜索更多相关主题的帖子: 不对劲 
2007-01-07 12:48
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

怎么错误还是老样子?栈得先初始化,只有一个光秃秃的指针是不行的...
if跟else不能断开,你中间又插了一句;
每次判断栈顶字符和当前扫描到的字符(非运算符就直接输出)时,如果栈顶的运算符的优先级高,则可以进栈,否则一直退到栈顶的运算符高于当前扫描的运算符为止.
遇到(就进栈,每次遇到)时,要一直退栈直到弹出(为止.


对不礼貌的女生收钱......
2007-01-07 16:02
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
好多语法上错误.

谁有强殖装甲第二部,可以Q我460054868
2007-01-07 18:57
快速回复:[求助]这个程序哪里不对劲
数据加载中...
 
   



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

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