C++模拟栈

主要包含一些简单的实现,用C++的类作为封装, 其中包含一些细节问题,比如存储数据元素的栈在初始化的时候不能用初始化列表,需要new申请空间,所以用完之后自然需要delete释放空间。

class MyStack
{
private:
	enum { STACK_INIT_SIZE = 10, STACK_INC_SIZE = 2 };//定义起始栈的大小为10,扩容增长为2倍
	int* data;
	int capacity;
	int top;
public:
	MyStack() :data(nullptr), capacity(STACK_INIT_SIZE), top(-1) 
	{
		data = new int[capacity];
	}
	MyStack(int sz) :data(nullptr), capacity(sz), top(-1)
	{
		data = new int[capacity];
	}
	~MyStack()
	{
		delete[]data;
		data = nullptr;
		capacity = 0;
		top = -1;
	}
	size_t Size()const
	{
		return top + 1;
	}
	bool Full()const
	{
		return capacity == Size();
	}
	bool Empty()const
	{
		return Size() == 0;
	}
	bool Push(int val)
	{
		if (Full() && Resize(capacity * STACK_INC_SIZE))return false;
		data[++top] = val;
		return true;
	}
	bool Pop()
	{
		if (!Empty())
		{
			top -= 1;
			return true;
		}
		return false;
	}
	bool Resize(int new_sz)
	{
		if (new_sz < Size())
		{
			new_sz = 2*Size();
		}
			int* new_data = new int[new_sz];
			int sz = Size();
			memmove( new_data,data, sz * sizeof(int));
			delete[]data;
			capacity = new_sz;
			data = new_data;
			return true;
	}
	int Top() //获取栈顶元素
	{
		return data[top];
	}
	const int& Top()const
	{
		return data[top];
	}
};
int main()
{
	MyStack mys;
	for (int i = 0; i < 100; i++)
	{
		cout << "push  " << i << "   " << mys.Push(i) << endl;
	}
	while (!mys.Empty())
	{
		int x = mys.Top();
		mys.Pop();
		cout << x << endl;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在凌晨等太阳¤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值