#ifndef MYSTACK_H
#define MYSTACK_H
#include<stdlib.h>
template<class Type>
class SeqStack // 栈 先进后出
{
private:
enum { INC = 2 };
Type* data;
int maxsize; // 容量
int top; //
public:
SeqStack(int sz = 10) :maxsize(sz), top(-1)
{
data = (Type*)malloc(sizeof(Type) * maxsize);
if (data == NULL) exit(1);
}
SeqStack(const SeqStack& seq)
{
maxsize = seq.maxsize;
top = seq.top;
data = (Type*)malloc(sizeof(Type) * maxsize);
memcpy(data, seq.data, sizeof(Type) * maxsize);
}
SeqStack& operator=(const SeqStack& seq)
{
if (this != &seq)
{
data = seq.data;
maxsize = seq.maxsize;
top = seq.top;
}
return *this;
}
~SeqStack()
{
free(data);
data = NULL;
maxsize = 0;
top = -1;
}
int GetSize() const { return top + 1; }
bool Is_Empty() const { return GetSize() == 0; }
bool Is_Full() const { return GetSize() == maxsize; }
bool Push(const Type& x)
{
if (Is_Full())
{
Type* newdata = (Type*)realloc(data, sizeof(Type) * maxsize * INC);
if (newdata == NULL) return false;
data = newdata;
maxsize = maxsize * INC;
}
data[++top] = x;
return true;
}
Type& GetTop()
{
return data[top];
}
const Type& GetTop() const
{
return data[top];
}
void Pop()
{
--top;
}
void Clear()
{
top = -1;
}
};
#endif