mystack头文件代码:
#define MAXSIZE 100
//顺序栈的存储结构
template <class T>
struct sqstack
{
T *base;
T *top;
};
//初始化栈
template <class T>
void InitSqstack(sqstack <T> &s)
{
s.base = new T[MAXSIZE];
if(!s.base)
exit(1);
s.top = s.base;
}
//顺序栈压栈
template <class T, class F>
void Push(sqstack <T> &s, F e)
{
if(MAXSIZE == s.top - s.base)
{
cout << "满栈" << endl;
exit(1);
}
*(++s.top) = e;
}
//顺序栈弹栈
template <class T>
void Pop(sqstack <T> &s)
{
if(s.top == s.base)
{
cout << "空栈" << endl;
exit(1);
}
s.top--;
}
//顺序栈栈顶
template <class T>
T Top(sqstack <T> s)
{
if(s.top == s.base)
{
cout << "空栈" << endl;
exit(1);
}
return *s.top;
}
//判断栈是否为空
template <class T>
bool EmptySqstack(sqstack <T> s)
{
if(s.base == s.top)
return true;
else
return false;
}
//从栈底输出栈
template <class T>
void PrintSqstack(sqstack <T> s)
{
while(s.base != s.top)
{
++s.base;
cout << *s.base;
}
}
主函数代码:
#include <iostream>
using namespace std;
#include <cctype>
#include <cstdlib>
#include "mystack.h"
/*
cctype库提供了处理字符串中字符的各种函数
*/
char s[101];
sqstack <char> temporarystack; //定义临时栈
sqstack <char> resultstack; //定义结果栈
//运算符优先级判断
int OperatorPriorityJ(char ch)
{
int gr