C++顺序栈的模版

来源:互联网 发布:黑道圣徒4捏脸数据 编辑:程序博客网 时间:2024/06/14 03:26
#if 0
//顺序栈的模板
#include <assert.h>
const int maxSize = 50;
const bool{false,true};
template <class T>
class Stack
{
public:
Stack(){};
virtual bool 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;
};
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);
bool IsEmpty()const {return top == -1 ? true : false;}
bool IsFull () const {return top == maxSize - 1 ? true : false;}
int getSize ()const {return top1;}
void MakeEmpty(){top = -1;}
friend ostream & operator << (ostream &os, SeqStack<T> &s);
private:
T *elements;
int top;
inr maxSize;
void overflowProcess();
};
template <class T>
SeqStack<T> ::SeqStack(int sz):top(-1),maxSize(sz)
{
elements = new T[maxSize];
assert(elements != NULL);
};
template <class T>
void SeqStack<T>::overflowProcess()
{
T *newArray = new T[maxSize + stackIncreament];
if(newArray == NULL )
{
cout<"error!"<<endl;
exit(1);
}
for(int i = 0 ;i <= top ; i++)
{
newArray[i] = elements[i];
}
maxSize = maxSize + stackIncreament;
delete [] elements;
elements = newArray;
};
template <class T>
void SeqStack<T> ::Push(const T *x)
{
if (IsFull() == true )
{
overflowProcess();
}
else
{
elements[++top] = x;
}
};
template <class T>
bool SeqStack<T> ::Pop(T &x)
{
if(IsEmpty() == true)
return false;
else
{
x = elements[top --];
return true;
}
};
template <class T>
bool SeqStack<T>::getTop(T &x)
{
if (IsEmpty() == true)
return false;
else
{
x = elements[top];
return true;
}
};
template <class T>
ostream& operator << (ostream &os , SeqStack <T> s)
{
os<<"top =" <<s.top <<endl;
for(int i = 0;i <= s.top; i++)
{
os<<i<<":"<<s.elements[i] << endl;
}
return os;
};
#endif
原创粉丝点击