wang-编程日记二:
虚基类
template<class T>
class Stack
{
public:
Stack(){};
virtual void Push(const T &x) = 0;//进栈
virtual bool Pop(T& x) = 0;//顶部元素出栈
virtual bool getTop(T& x)const = 0;//读取栈顶元素
virtual bool IsEmpty() const = 0; //判断栈是否为空
virtual bool IsFull() const = 0; //判断栈是否满
virtual int getSize() const = 0; //得到当前储存元素数量
~Stack(){};
};栈是一种先进后出的数据结构,我目前一般用栈把递归的代码改为非递归。
栈
const int stackIncreament = 20; //溢出后扩充空间大小
template<class T>
class SeqStack :public Stack<T>
{
public:
SeqStack(int sz = 50);
~SeqStack(){ delete[]elements; };
void Push(const T& x);
bool Pop(T& x);
bool getTop(T& x) const;
bool IsFull()const{return (top == maxSize - 1) ? true : false;};
bool IsEmpty()const { return (top == -1) ? true : false; }
int getSize()const { return top + 1; }
void MakeEmpty(){ top = -1; }
private:
T *elements;
int top;
int maxSize;
void overflowProcess();
};
template<class T>
SeqStack<T>::SeqStack(int sz) :top(-1), maxSize(sz)
{
elements = new T[maxSize];
};
template<class T>
void SeqStack<T>::Push(const T& x)
{
if (IsFull() == true) overflowProcess();
elements[++top] = x;
};
template<class T>
bool SeqStack<T>::Pop(T& x)
{
if (IsEmpty() == true) return false;
x = elements[top--];
return true;
};
template<class T>
bool SeqStack<T>::getTop(T& x) const
{
if (IsEmpty() == true) return false;
x = elements[top];
return true;
};
template<class T>
void SeqStack<T>::overflowProcess()
{
T *newArray = new T[maxSize + stackIncreament];
if (newArray == NULL)
return;
for (int i = 0; i <= top; i++)
newArray[i] = elements[i];
maxSize = maxSize + stackIncreament;
delete[] elements;
elements = newArray;
};
----------wang
有问题发我邮箱:568551096@qq.com