概念
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);
栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
代码
#include<iostream>
using namespace std;
template<class T>
class stack{
public:
stack(int init=10){
this->maxlength=init;
array = new T[init];
this->length=0;
}
~stack(){
delete []array;
}
bool empty(){
return length==0;
}
T top(){
if(empty()){
cout<<"栈为空"<<endl;
}
return array[length-1];
}
void pop(){
if(empty()){
cout<<"栈为空"<<endl;
}
array[--length].~T();
}
void push(const T& element){
if(length==maxlength){
maxlength*=2;
T * newstack = new T[maxlength];
for(int i=0;i<length;i++) newstack[i]=array[i];
delete []array;
array = newstack;
}
array[length++]=element;
}
int size(){return length;}
int capactiy(){return maxlength;}
private:
T* array;
int length;
int maxlength;
};
int main(){
stack<int> s(3);
s.push(1);
s.push(2);
cout<<"元素大小:"<<s.size()<<endl;
cout<<"stack的最大空间:"<<s.capactiy()<<endl;
s.push(3);
s.push(4);
cout<<"元素大小:"<<s.size()<<endl;
cout<<"stack的最大空间:"<<s.capactiy()<<endl;
while(s.empty()==false)
{
cout<<s.top()<<endl;
s.pop();
}
return 0;
}
运行截图
应用