< 由于之前的两篇的内容中都有提到栈,所以在此将栈的模拟实现简单讲解 >
栈是仅能在表尾进行插入或删除元素的线性表。我们将表尾端称为栈顶,表头称为栈底
栈的基本操作包括:
栈顶进行插入、删除,栈的初始化,判空,取出栈顶元素
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <assert.h>
#include <iostream>
using namespace std;
template <typename T>
class Stack
{
public:
Stack()
:_size(0)
,_capacity(0)
,_a(NULL)
{}
~Stack()
{
if (_a != NULL)
{
delete[] _a;
_a = NULL;
}
_size = 0;
_capacity = 0;
}
public:
bool Empty() //判空
{
return _size == 0;
}
size_t Size() //栈内元素的个数
{
return _size;
}
T& Top() //取出栈顶元素
{
return _a[_size-1];
}
void Push(const T& x) //插入
{
CheckCapacity();
//_a[_size] = x;
//_size++;
_a[_size++] = x;
}
void Pop() //删除
{
assert(_size > 0 );
_size--;
}
private:
void CheckCapacity()<span style="white-space:pre"> </span>//增容时检测容量
{
if (_size == _capacity)
{
int NewCapacity = _capacity * 2 + 1;
T* tmp = new T[NewCapacity];
//memcpy(tmp,_a,sizeof(T)*_size);
for (int i=0; i<_size; i++)
{
tmp[i] = _a[i];
}
delete[] _a;
_a = tmp;
_capacity = NewCapacity;
}
}
protected:
size_t _size;
size_t _capacity;
T* _a;
};