一:
(1)stack是一种序列式容器,在头文件<stack>
中包括,也是一个适配器类,默认的底层实现为vector;
(2)他的特点是先进后出,只能在栈顶对元素进行压栈和出栈操作;
(3)模拟是实现stack,要实现★栈的判空,★求栈中元素个数,★压栈和★出栈操作,★返回栈顶元素等;
二.、程序代码:
#include <iostream>
using namespace std;
#include <cassert>
#include<cstdlib>
template<class T>
class Stack
{
public:
Stack()
:_a(NULL)
,_size(0)
,_capacity(0)
{}
~Stack()
{
if (_a!=NULL)
{
delete []_a;
_a=NULL;
}
_size=0;
_capacity=0;
}
public:
bool Empty()//判断栈是否为空
{
return _size==0;
}
bool Full()//判断栈是否已满
{
return _size==_capacity;
}
size_t Size()//返回栈中元素的个数
{
return _size;
}
T& Top()// 返回栈顶的元素
{
assert(_size>0);
return _a[_size-1];
}
void CheakCapacity()//判容
{
if (Full())
{
int NewCapacity=_capacity*2+3;
T* tmp=new T[NewCapacity];
//memcpy(tmp,_a,sizeof(T)*_size);
for (size_t i=0;i<_size;++i)
{
tmp[i]=_a[i];
}
delete[] _a;
_a=tmp;
_capacity=NewCapacity;
}
}
void Push(const T& x)//栈顶压入新元素
{
CheakCapacity();
_a[_size]=x;
_size++;
}
void Pop()// 删除栈顶元素
{
if (Empty())
{
cout<<"栈已空"<<endl;
return;
}
else
{
_size--;
}
}
protected:
T* _a;
size_t _size;
size_t _capacity;
};
测试代码:
int main()
{
Stack<int> s;
s.Push(1);
s.Push(3);
s.Push(5);
s.Push(7);
s.Push(9);
cout<<"stack empty?"<<s.Empty()<<endl;
cout<<"stack full?"<<s.Empty()<<endl;
s.Pop();
cout<<"stack size:"<<s.Size()<<endl;
cout<<"stack top:"<<s.Top()<<endl;
return 0;
}
三:运行结果:
接下来是栈的好兄弟队列的模拟实现——-O(∩_∩)O哈哈~