实现的计算机非常简化,单行输入,具备±*/ %绝对值ABS功能,但对于负号和abs的出现都有限制,见下图:
代码如下:
#include <iostream>
#include <cmath>
#include <algorithm>
#include <assert.h>
using namespace std;
//顺序栈
template <class Type> class Stack {
public:
Stack(int s);
Stack() {
//默认构造
elements = new Type[300]; //暂时定为300个
};
~Stack() {
delete[]elements;
}
void push(const Type& item);
Type pop();
Type getTop();
//void MakeEmpty();
Type& top() {
return elements[top1]; } //&&&&&&&&&&&&&&&&&&,必须加&来直接指向内存元素
bool empty() const {
return top1 == -1; }
int full() const {
return top1 == maxSize - 1;
};
private:
int top1;
Type* elements;
int maxSize=10;
};
template <class Type> Stack<Type> ::Stack(int s) :top1(-1), maxSize(s) {
elements = new Type[maxSize];
assert(elements != 0); //断言,判断括号中条件是否为真,为真则执行.
}
template <class Type> void Stack<Type> ::push(const Type & item) {
assert(!full());
elements[++top1] = item;
}
template <class Type> Type Stack<Type> ::pop() {
assert(!empty());
return elements[top1--];
}
template <class Type> Type Stack<Type> ::getTop() {
assert(!empty());
return elements[top1];
}
/*
判断优先级
*/
//栈内
int isp(char op) {
int ret=0;
switch (op) {
case