#ifndef _SEQSTACK_H_
#define _SEQSTACK_H_
#include<iostream>
using namespace std;
#define CAPACITY 10
#define INC_SIZE 10
template <class T>
class SeqStack
{
public:
SeqStack(); //构造函数,栈的初始化
void Push(const T &data); //将元素x入栈
void Pop(); //将栈顶元素弹出
T& GetTop() const; //取栈顶元素
bool Empty() const; //判断栈是否为空
size_t Size() const; //栈当前元素的个数
private:
void CheckCapacity() ;//检查容量(扩容)
private:
T *base;
size_t capacity;
size_t size; //栈中实际元素的个数
int top; //栈顶指针
};
template <class T>
SeqStack<T>:: SeqStack() //构造函数,栈的初始化
{
capacity = CAPACITY; //设置容量
base = new T[capacity]; //开辟空间
size=0;
top=0;
}
template <class T>
void SeqStack<T>:: CheckCapacity()
{
if(size==capacity)//栈满扩容
{
capacity += INC_SIZE;
T *newbase = new T[capacity];
//拷贝数据
for(int i=0;i<size;i++)
newbase[i] = base[i];
//释放原来的空间
delete [] base;
base = newbase;
}
}
template <class T>
void SeqStack<T>:: Push(const T &data)
{
CheckCapacity();//检查容量
base[top]=data;
top++;
size++;
}
template <class T>
void SeqStack<T>:: Pop()
{
if(top==0)
{
cout<<"栈中已无元素!!!"<<endl;
}
top--;
size--;
}
template <class T>
T& SeqStack<T>:: GetTop() const
{
if(top!=0)
return base[top-1];
}
template <class T>
bool SeqStack<T>:: Empty() const
{
if(top==0)
return true;
return false;
}
template <class T>
size_t SeqStack<T>:: Size() const
{
return size;
}
#endif