| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 548 人关注过本帖
标题:数据结构中表达式求值问题,望高手给予解答。
只看楼主 加入收藏
heshiyuan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
数据结构中表达式求值问题,望高手给予解答。
程序代码:
程序运行得不到结果。(不需要考虑大整数)
typedef char SElemType;
typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}Sqstack;
typedef struct{
    int*base;
    int*top;
    int stacksize;
}sqstack;
typedef char Status;
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 6
#define TRUE 1
#define FALSE 0
#include <stdio.h>
#include<stdlib.h>
Status  Initstack (Sqstack &S)     
{   S.base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType));
    if (!S.base)   return FALSE; 
    S.top= S.base ;             S. stacksize=STACK_INIT_SIZE; 
    return  TRUE;                        
}

Status push(Sqstack &S,SElemType e)
{  if (S. top -S. base== S. stacksize) 
    { SElemType*p; p=(SElemType*)realloc(S.base ,   
           (S.stacksize+STACKINCREMENT )*sizeof(SElemType)); 
        if (!p)   return FALSE;    
       S.base=p; S. top = S. base+ S. stacksize; 
      S. stacksize+= STACKINCREMENT; 
    }
  *S.top=e;   S.top++;
  return TRUE;
}

Status  pop(Sqstack &S, SElemType &e)
{    if (S.top==S.base ) return  FALSE;
     e=*(S.top-1);    S.top--;  
     return  TRUE;
}
 Status GetTop(Sqstack S,SElemType &e){
     if(S.base==S.top) return FALSE;
    e=*(S.top-1);
    return TRUE;
}
char Precede(SElemType a,SElemType b){
    switch (b){
    case '+':
    case '-':  switch (a){
    case'(':
    case'#':  return'<';break;
    default:  return'>';
               }break;
    case'*':
    case'/': switch(a){
    case'*':
    case'/':  return'>';break;
    default:  return'<';
             }break;
    case'(':  return'<';break;
    case')':switch (a){
    case'(':  return '=';break;
    default:  return '>';
            }
    case'#': return '>';break;
    default: return FALSE;
    }

}
char Operate(SElemType a,SElemType theta,SElemType b){
      char   c;   
      a=a-48;   
      b=b-48;   
      switch(theta){   
                  case   '+':c=a+b+48;break;   
                  case   '-':c=a-b+48;break;   
                  case   '*':c=a*b+48;break;   
                  case   '/':c=a/b+48;break;   
          }   
          return   c;   

}
In(SElemType y){
    if(y=='+'||y=='-'||y=='*'||y=='/'||y=='#') return FALSE;
    else return TRUE;
}
void main(){SElemType c,x,theta,a,b;Sqstack OPTR;Sqstack OPND;
    Initstack(OPTR); push(OPTR,'#');
    Initstack(OPND); 
    printf("请输入表达式:\n");
    c=getchar();
    while(c!='#'||GetTop(OPTR,x)!='#'){
        if(In(c)){push(OPND,c);c=getchar();}
        else
            switch(Precede(GetTop(OPTR,x),c)){
            case'<': push(OPTR,c);c=getchar();
                break;
            case'=': pop(OPTR,x);c=getchar();
                break;
            case'>':
                pop(OPTR,theta);
                pop(OPND,b);pop(OPND,a);
                push(OPND,Operate(a,theta,b));
                break;
        }
    }
    printf("计算结果:%c",*(OPND.top-1));
}
	
		
			
图片附件: 游客没有浏览图片的权限,请 登录注册
程序运行到此就没反应了。请高手指点,非常感激。


[ 本帖最后由 heshiyuan 于 2009-11-6 16:46 编辑 ]
搜索更多相关主题的帖子: 求值 表达 解答 数据结构 
2009-11-06 16:28
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:20 

我可好玩啦...不信你玩玩^_^
2009-11-06 18:17
heshiyuan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-30
收藏
得分:0 
希望高手指点一下我的错在哪了。非常感激。
2009-11-06 21:34
快速回复:数据结构中表达式求值问题,望高手给予解答。
数据加载中...
 
   



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

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