数据结构 第二折 栈——使用动态分配内存的方式实现栈的出入

栈,是非常简单的一种结构,我们简单的讲讲出栈和入栈就好了。
栈是标准的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];
	}
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值