吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3521|回复: 4
收起左侧

[会员申请] 申请会员ID huiseguiji[冒充他人作品,申请不通过]

 关闭 [复制链接]
吾爱游客  发表于 2011-5-2 19:18
ID huiseguiji   邮箱:122565622@qq.com
#include<stdio.h>
#include<malloc.h>
#include<iostream.h>

struct node
{  
  int date;
  struct node *next;
};
typedef struct node *link;
link number=NULL;
link symble=NULL;
//把数据放入栈中//
link push(link stack ,int num,int k)
{  link newnode;
   newnode=(link)malloc(sizeof(struct node));
   if(newnode==NULL)
    cout<<"out of space"<<endl;
     else
  {   if(k>=0 && k<=9)//判断前一个字符是否为数字
   {  
    stack->date=stack->date*10+num;
       return stack;
   }
  else
  {
       newnode->date=num;
          newnode->next=stack;
    stack=newnode;
    return stack;

  
  }
  }
}

//从栈上取出数据//
link pull(link stack,int *num)
{
link top;//去栈顶元素
if(stack!=NULL)
{
  top=stack;
  stack=stack->next;
  *num=top->date;
  free(top);
  return stack;

}
else
  *num=0;

}
//判断栈是否为空
int empty(link stack)
{
if(stack==NULL)
  return 1;
else
  return 0;

}
//判断是否为运算符
int is_symble(char ch)
{
switch(ch)
{     case '(':
    case ')':
       case '+':
          case '-':
    case '*':
    case '/':   
     return 1;
         default:
     return 0;
}

}
// 判断运算符的优先级
int priority(char ch)
{  
switch(ch)
{   case '(':
                return 1;
          case '+':
       case '-':return 2;
    case '*':
    case '/': return 3;//'+','-'的优先级小于'*','/'
    default:return 0;
  }
  
}
//计算两个操作数的值
int tuo_result(int m,int num1,int num2 )
{  switch(m)
  { case '+':
              return(num2 + num1);
          case '-':
    return (num2-num1);
    case '*':
     return(num2 * num1);
    case '/':
     return(num2 / num1);  
  }
   
         

}

//主函数
void main ()
{
char expression[50];//存放表达式
int position=0;//表达式的位置
int sym=0;//运算符
int num1=0;//后操作数
int num2=0;//前操作数
int sum=0;//运算结果
    cout<<"请输入表达式:"<<endl;
    gets(expression);
while(expression[position]!='\0' && expression[position]!='\n')
{ if(is_symble(expression[position]))//判断运算符
    {
  if(expression[position]=='(')
       symble=push(symble,expression[position],-1);
      else if(expression[position]==')')
   {  while(symble->date!='(')
   {   number=pull(number,&num1);
    number=pull(number,&num2);
    symble=pull(symble,&sym);
    number=push(number,tuo_result(sym,num1,num2),-1);
    }
      //if(symble->date='(')symble=pull(symble,&sym);
      symble=pull(symble,&sym);

   }
  
   else if(!empty(symble))//判断放运算符的栈是否为空
   
   { if(priority(expression[position]) <= priority(symble->date) &&
    !empty(symble))
     {
          //取出一个运算符和两个操作数
    number=pull(number,&num1);
    number=pull(number,&num2);
    symble=pull(symble,&sym);
    number=push(number,tuo_result(sym,num1,num2),-1);
    //cout<<tuo_result(sym,num1,num2)<<endl;
    //把运算符放在栈里
    //symble=push(symble,expression[position],-1);
     }
           symble=push(symble,expression[position],-1);
   }

  
    //把运算符放在栈里
  else
   symble=push(symble,expression[position],-1);
  

  }
   else if(!is_symble(expression[position]))//把操作数放在栈里
                number=push(number,expression[position]-48,expression[position-1]-48);
   //cout<<expression[position]<<endl;

  position++;
}


//取出运算符栈的运算符
while(!empty(symble))
{   //cout<<symble->date<<endl;
  
  symble=pull(symble,&sym);
  if(!empty(symble))//判断是否为空
  {
   if(sym=='+' && symble->date=='-' )//判断符号问题 ,2-2*3+5=1不然就是-1
      sym='-';
  }
  number=pull(number,&num1);
  number=pull(number,&num2);

  //cout<<num1<<"  "<<num2<<endl;
  //计算的结果放在栈中
        number=push(number, tuo_result(sym,num1,num2),-1);
  //cout<<number->date<<endl;

     }
//取出运算结果
    number=pull(number,&sum);
cout<<expression<<"="<<sum<<endl;



}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2011-5-20 18:43
http://wenku.baidu.com/view/d6f6cb5077232f60ddcca1a4.html
你就到处抄,也不抄全...
eyt 发表于 2011-5-20 18:51
1322 发表于 2011-5-22 01:30
eyt 发表于 2011-5-23 00:59
回复 1322 的帖子

钱好多 能分点就好了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-1 23:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表