//头文件
#pragma once
#include<iostream>
#include<string>
using namespace std;
#define DEFAULT_SIZE
template<class T>
class SqStack
{
private:
int top;
int maxsize;
T* elem;
public:
SqStack(int size = DEFAULT_SIZE);
SqStack(const SqStack<T>& st);
~SqStack();
//返回栈中元素个数
int Length();
//判断栈是否为空
bool Empty();
//清空栈
void Clear();
//入栈
bool Push(T e);
//出栈
bool Back(T &e);
//返回栈顶元素
bool GetTop(T& e);
};
//cpp文件
#include"顺2序栈.hpp"
#include<iostream>
#include<string>
using namespace std;
template<class T>
SqStack<T>::SqStack(int size)
{
this->elem = new T[size];
this->top = -1;
maxsize = size;
}
template<class T>
SqStack<T>::SqStack(const SqStack& st)
{
this->maxsize = st.maxsize;
this->elem = new T[maxsize];
this->top = st.top;
for (size_t i = 0; i < =st.top; i++)
{
elem[i] = st.elem[i];
}
}
template<class T>
SqStack<T>::~SqStack()
{
delete[] elem;
}
template<class T>
int SqStack<T>::Length()
{
int size;
return size = this->top + 1;
}
template<class T>
bool SqStack<T>::Empty()
{
if(this->top!=-1)
{
return false;
}
else
{
return true;
}
}
template<class T>
void SqStack<T>::Clear()
{
top = -1;
}
template<class T>
bool SqStack<T>::Push(T e)
{
if (top == this->maxsize-1)
{
throw"已满";
}
++top;
elem[this->top] = e;
return true;
}
template<class T>
bool SqStack<T>::Back(T& e)
{
if (top == -1)
throw"非法";
e = elem[top--];
return true;
}
template<class T>
bool SqStack<T>::GetTop(T &e)
{
e = elem[top];
return true;
}