顺序栈的实现
#include <iostream>
#include <cstdlib>
using namespace std;
const int STACK_INIT_SIZE = 20;
const int ERROR = 0;
const int OK = 1;
const int EMPTY = 0;
typedef int Status;
template <class T>
class SqStack
{
public:
SqStack();
~SqStack();
Status Push(T e);
Status Pop(T &e);
Status GetTop(T &e) const;
int StackLength() const;
Status IsEmpty();
void DispStack();
private:
T * base;
T *top; //栈顶指针
int stacksize;
};
//初始化一个栈
template <class T>
SqStack<T>::SqStack()
{
base = new T[STACK_INIT_SIZE];
top = base;
stacksize = STACK_INIT_SIZE;
}
//释放一个栈
template <class T>
SqStack<T>::~SqStack()
{
delete[] base;
}
//取顺序栈栈顶元素算法
template <class T>
Status SqStack<T>::GetTop(T &e) const
{
if (top == base)
{
return ERROR;
}
e = *(top - 1);
return OK;
}
//顺序栈入栈
template <class T>
Status SqStack<T>::Push(T e)
{
if (top - base >= stacksize)
{
return ERROR;
}
*top++ = e; //先赋值,再加指针
return OK;
}
//顺序栈出栈
template <class T>
Status SqStack<T>::Pop(T &e)
{
if (top == base)
{
return ERROR;
}
e = *--top; //先减指针,再取值
return OK;
}
//求栈长
template <class T>
int SqStack<T>::StackLength() const
{
int sizeCount = 0;
T *p = top - 1;
while (p >= base)
{
sizeCount++;
p--;
}
return sizeCount;
}
template <class T>
Status SqStack<T>::IsEmpty() //空栈为0,非空栈为1;
{
if (top == base)
{
return EMPTY;
}
else
{
return OK;
}
}
template <class T>
void SqStack<T>::DispStack()
{
T *p = top - 1;
while (p >= base)
{
cout << *p << " ";
p--;
}
cout << endl;
}
bool In(char c)
{
if (c>48 && c<57)
{
return false;
}
else
{
return true;
}
}
//判断优先级
char Precede(char o1, char o2)
{
char f =