表达式求值是进行数据处理的最基本操作。请编写程序完成一个简单算术表达式的求值。要求如下:
(1) 运算符包括:+、-、*、-、^(乘方)、括号
(2)运算量为数值常量,根据自己的能力可以对运算量做不同的约束,例如1位整数、多位整数、实数等(会有不同的测试用例);
输入:一行,即表达式,以“=”结束。例如:
5*(8-3)+6/5=
输出:一行,即表达式的值。结果值为整数时输出为整数,如果有小数时保留5位小数。
26.20000
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
int *create(int x,int y)
{
int *a;
a=new int[2];
a[0]=x,a[1]=y;
return a;
}
template<class T>
struct node
{
T x;
node<T>* nex,*pre;
node()
{
nex=NULL;
pre=NULL;
}
node(T a)
{
x=a;
pre=nex=NULL;
}
};
template<class T>
class Link
{
public:
node<T> *e,*head,*last;
int siz;
Link();
Link(const Link& L);
~Link();
void push_back(T val);
void build();
void Insert(int pos,T x);
void del(T x);
int Search(int x);
void print();
void Sort();
void deleteAll();
};
template <class T>
Link<T>::Link()
{
head = new node<T>;
last = new node<T>;
head->nex = last;
head->pre = NULL;
last->nex = NULL;
last->pre = head;
siz = 0;
}
template <class T>
Link<T>::Link(const Link &L)
{
head = new node<T>;
head->pre = NULL;
last = new node<T>;
head->nex = last;
last->pre = head;
siz = 0;
e = L.head;
while(e->nex != L.last)
{
e = e->nex;
last->x = e->x;
node<T> *p = new node<T>;
p->pre = last;
last->nex = p;
last = p;
siz++;
}
last->nex = NULL;
}
template <class T>
Link<T>::~Link()
{
if(siz == 0)
{
delete head;
delete last;
head = NULL;
last = NULL;