| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 756 人关注过本帖
标题:一个用栈实现后缀表达式的程序
只看楼主 加入收藏
zclllt
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-3-16
收藏
 问题点数:0 回复次数:1 
一个用栈实现后缀表达式的程序

一个用栈实现后缀表达式的程序帮帮看一 下有没有错误,谢谢
#include <iostream.h>
#include <math.h>
#include <stack.h>
#include <assert.h>
using namespace std;
enum Boolean{False,True};
template<class Type>class Stack{
public:
Stack (int=10);
~Stack(){delete[]elements;}
void Push(const Type&item);
Type Pop();
Type GetTop();
void MakeEmpty(){top=-1;}
int IsEmpty()const{return top==-1;}
int IsFull()const{return top==maxSize-1};
private:
int top;
Type *elements;
int maxSize;
};
template<class Type> Stack<Type>::Stack(int s):top(-1),maxSize(s){
elements=new Type[maxSize];
assert(elements!=0);
}
template<class Type>void Stack<Type>::Push(const Type&item){
assert(!IsFull());
elements[++top]=item;
}
template<class Type>Type Stack<Type>::Pop(){
assert(!IsEmpty());
return elements[top--];
}
template<class Type>Type Stack<Type>::GetTop(){
assert(!Is Empty());
return elements[top];
}

class Calculator{
public:
Calculator(int sz):s(sz){}
void Run();
void Clear();
private:
void AddOperand(double value);
Boolean Get2Operands(double&left,double&right);
void DoOperand(char op);
stack<double>s;
};
void Calculator::AddOperand(double value){
s.Push(value);
}
Boolean Calculator:: Get2OPerands(double&left,double&right){
if (s.IsEmpty()){
cerr<<"Missing Operand!"<<endl; return Flase;
}
right=s.Pop();
if(s.IsEmpty()){
cerr<<"Missing Operand!"<<endl; return Flase;
}
left=s.Pop();
reyurn True;
}
void Calculator::DoOperator(char op){
double left,right; Boolean result;
result=Get2Operands(left,right);
if(result==True)
switch(op){
case'+': s.Push(left+right);break;
case'-': s.Push(left-right);break;
case'*': s.Push(left*right);break;
case'/': if(right==0.0){
cerr<<"Divide by 0!"<<endl; Clear();
}
elses.Push(result=left/right);break;
case'^': s.Push(Power(left,right));break;
}
else Clear();
}
void Calculator::Run(){
char c[20];
while(cin>>d,*c!='q')
switch(*c)
{
case'c': S.ClearStack();
break;
case'-'
if(strlen(c)>1)
AddOperand(atoi));
else DoOperator (*c);
break;
case'+':
case'*':
case'/':
case'^':
Do Operator(*c);
break;
default:
AddOperand(atoi(c));
break;
}
}
void Calculator::Clear(void)
{S.ClearStack();}
//1.cpp

int main()
{
Calculator CALC;
CALC.Run();
}



搜索更多相关主题的帖子: 后缀 Stack include Type 
2006-12-26 12:26
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 
你还是加点注释再发上来吧
有几个地方是格式有错误,比如16行最后的括号和分号反了,有一个调用IsEmpty写成了Is Empty
然后你用的到底是VC6.0还是.net或2005,如果不是VC6.0就把第一行改成
"#include <iostream>",
如果是VC6.0就用不着"using namespace std;"这行。

2006-12-27 11:28
快速回复:一个用栈实现后缀表达式的程序
数据加载中...
 
   



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

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