栈,是非常简单的一种结构,我们简单的讲讲出栈和入栈就好了。
栈是标准的FILO(first in last out 先入后出)结构,就像我们累砖头,后来的放在最上面,要拿下来的时候也是要从最上面拿。
我们使用realloc来实现一个动态数组,每当有数据入栈,我们就把内存增加一个单位,然后把新来的数据插入到最后;出栈时,我们直接把内存-1,那么最后一个就会被直接去掉。
话不多说,看代码与注释吧
template <typename T>
class stack_sq
{
private:
T *st; //动态数组
int si; //数组大小
public:
stack_sq()
{
st = (T*)malloc(sizeof(T)); //先开辟一块内存
si = 0;
}
void pop() //出栈
{
if (si <= 0)
exit(-1);
realloc(st,sizeof(T)*(si - 1)); //重新分配内存,使得内存空间数-1
si--;
}
void push(T data) //入栈
{
realloc(st,sizeof(T)*(si + 1)); //使得内存空间数+1
st[si] = data;
//cout << st[si];
si++;
}
int size() //返回数组大小
{
return si;
}
T operator[](unsigned int index) //重载的[]运算符,用来获取数值
{
if (index >= si)
{
printf("outofrange");
exit(-1);
}
return st[index];
}
};