鱼C论坛

 找回密码
 立即注册
查看: 2276|回复: 2

C++提问

[复制链接]
发表于 2014-7-18 17:34:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
#include<math.h>
#include<ctype.h>
using namespace std;
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define MAXBUFFER 10
//逆波兰的计算器
//栈的顺序存储结构
typedef double ElemType;
typedef struct
{
ElemType *base; //栈底
ElemType *top;  //用指针表示,指示栈的最顶层,没放元素
int stackSize;
}SqStack;

//初始化一个栈
void InitStack(SqStack *s)
{
s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s->base)
  exit(0);
s->top=s->base;
s->stackSize=STACK_INIT_SIZE;
}

//插入一个元素
void Push(SqStack *s,ElemType e)
{
if(s->top-s->base>=s->stackSize)
{
  s->base=(ElemType *)realloc(s->base,(s->stackSize+STACK_INIT_SIZE)*sizeof(ElemType));
  if(!s->base)
   exit(0);
}
*(s->top)=e;
s->top++;
}

//删除一个元素
void Pop(SqStack *s,ElemType *e)
{
if(s->top==s->base)
  return;
*e=*--(s->top);
}
//清空一个栈,将栈中的元素全部作废,但栈本身的物理空间并不发生改变
void ClearStack(SqStack *s)
{
s->top=s->base;
}

//销毁一个栈,是要释放掉该栈所占据的物理内存空间
void DestoryStack(SqStack *s)
{
int len;
len=s->stackSize;
for(int i=0;i<len;i++)
{
  free(s->base);
  s->base++;
}
s->base=s->top=NULL;
s->stackSize=0;
}

//计算栈的当前容量,栈的最大容量是指该栈占据内存空间的大小其值是s.stackSize,与当前容量摸不同
int StackLen(SqStack s)
{
return(s.top-s.base);  //指针之间不能相加,但可以相减
}

int main()
{
SqStack s;
char c;
double d,e;
char str[MAXBUFFER];
int i=0;
InitStack(&s);
cout<<"请按逆波兰表达式输入待计算数据,数据与运算法之间用空格隔开,以#作为结束标志!"<<endl;
cin>>c;
while(c!='#')
{
  while(isdigit(c) || c=='.')    //用于过滤数字
  {
   str[i++]=c;
   str='\0';
   if(i>=10)
   {
    cout<<"输入的单个数据过大!"<<endl;
    return -1;
   }
   cin>>c;
   if(c==' ')
   {
    d=atof(str);      //将字符串转化为浮点数
    Push(&s,d);
    i=0;
    break;
   }
  }
  switch(c)
  {
  case '+':
   Pop(&s,&d);
   Pop(&s,&e);
   Push(&s,e+d);
   break;
  case '-':
   Pop(&s,&d);
   cout<<d<<endl;
   Pop(&s,&e);
   cout<<e<<endl;
   cout<<d-e<<endl;
   Push(&s,e-d);
   break;
  case '*':
   Pop(&s,&d);
   Pop(&s,&e);
   Push(&s,e*d);
   break;
  case '/':
   Pop(&s,&d);
   Pop(&s,&e);
   if(d!=0)
    Push(&s,e/d);
   else
    cout<<"出错,除数为0!"<<endl;
   break;
  }
  cin>>c;
}
Pop(&s,&d);
cout<<"最后的结果为:"<<d<<endl;
return 0;

}

哪儿有错啊 ?为啥送不到栈内呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-18 20:05:49 | 显示全部楼层
请使用代码格式发帖

请注意缩进!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-19 16:14:04 | 显示全部楼层
本来是好的,可是粘到上面的时候就编程那样了,嘿嘿,谢谢啦,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 23:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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