| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 480 人关注过本帖
标题:逆波兰式编译不过去
取消只看楼主 加入收藏
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
结帖率:94.12%
收藏
已结贴  问题点数:15 回复次数:1 
逆波兰式编译不过去
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct SqStack
 {
   char elem[MAXSIZE];
   int top,base;
 }stack;
void initstack(stack *s)
{
    s->top=s->base=0;
}
int getTop(stack *s)
{
     return s->top;
}
int push(stack *s,char e)
{
 if(s->top==MAXSIZE-1)
 {
   printf("栈满溢出");
   return 0;
 }
 else
 {
  s->elem[s->top++]=e;
 }
 return 1;
}
int stackempty(stack *s)
{
  if(getTop(s)>0)
  return 1;
  else
  return 0;
}
char pop(stack *s,char *e)
{
  *e=s->elem[--s->top];
  return *e;
}
char top(stack *s)
{
  return s->elem[s->top-1];
}
int precede(char op)
{int x;
 switch(op)
 {
   case '*':x=2;break;
   case '/':x=2;break;
   case '+':x=1;break;
   case '-':x=1;break;
   default:x=0;
  }
 return x;
}
char *repression(stack s,char *e)
{
  char *c,ch,w;
  int i=0,j=0;
  c=(char *)malloc(sizeof(char)*20);
  push(&s,'@');
  ch=e[i++];
  while(ch!=0)
  {
    if(ch=='(')
    {
      push(&s,ch);
      ch=e[i++];
    }
    else if(ch==')')
    {
      while(top(&s)!='(')
      {
        pop(&s,c[j++]);
       }
      pop(&s,ch);
      ch=e[i++];
    }
    else if(ch=='+'||ch=='-'||ch=='*'||ch=='/')
    {
      w=top(&s);
      while(precede(w)>=precede(ch))
      {
        pop(&s,c[j++]);
        w=top(&s);
      }
      push(&s,ch);
      ch=e[i++];
    }
    else
    {
      c[j++]=ch;
      ch=e[i++];
    }
  pop(&s,ch);
  while(ch!='@')
  {
    c[j++]=ch;
    pop(&s,ch);
  }
  return c;
 }
}
main()
{char str[MAXSIZE];
 char *e,*p;
 int i=0;
 stack s;
 e=str;
 p=(char *)malloc(sizeof(char));
 initstack(&s);
 do
 {
   scanf("%c",&str[i]);
   i++;
 }while(str[i]!=0&&i!=MAXSIZE-1);
 p=repression(&s,e);
 while(*p)
 {
   printf("%c",*p);
   p++;
  }
   
}
搜索更多相关主题的帖子: 编译 波兰 
2010-04-09 11:16
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
收藏
得分:0 
楼上的,你是来解决问题的还是来做评论的???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????、、
2010-04-11 11:19
快速回复:逆波兰式编译不过去
数据加载中...
 
   



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

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