用C++实现栈的类模板

 其他数据结构链接如下:

用C++实现栈的类模板-优快云博客

用C++实现队列模板类-优快云博客

用C语言实现链表-优快云博客

用C语言实现哈希表(散列表)-优快云博客

 数据结构二叉树C代码-优快云博客

栈:动态集合。在栈中,被删除的是最近插入的元素,其实现的是一种后进先出策略。在栈上插入操作称为压入PUSH,删除操作称为弹出POP

代码如下:

#include <iostream>
#include <memory>

using namespace std;

template<typename T>
class myStack{

private:
	int iSize = 0;
	int iTop = -1;
	T *pData;

public:
	void set_size(int size)
	{
		if(pData == NULL)
		{
			pData = new T[size];
			for(int i = 0; i < size; i++)
			{
				pData[i] = 0;
			}
			this->iSize = size;
		}
		else
		{
			T *pTmpData = new T[size];
			if(size < this->iSize)
			{
				for(int i = 0; i < this->iSize; i++)
				{
					pTmpData[i] = pData[i];
				}
			}
			else
			{
				for(int i = 0; i < size; i++)
				{
					if(i < this->iSize)
					{
						pTmpData[i] = pData[i];
					}
					else
					{
						pTmpData[i] = 0;
					}
				}
			}
			
			delete pData;
			pData = pTmpData;
			this->iSize = size;
		}
	};
	const int get_size(){return iSize;};
	const int get_top(){return iTop;};
	bool empty(){return iTop == -1;};
	bool push(T Data)
	{
		if(iTop >= iSize - 1){return false;}
		iTop++;
		pData[iTop] = Data;
		return true;
	}
	bool pop(T *Data)
	{
		if(empty())
		{
			return false;
		}
		*Data = pData[iTop--];
		return true;
	}
	~myStack()
	{
		if(pData != nullptr) 
		{
			delete pData;
		}
	}
};

int main()
{
	myStack<int> _stack;
	_stack.set_size(6);
	_stack.set_size(10);
	cout<<"stack size:"<<_stack.get_size()<<endl;

	int data;
	if(_stack.pop(&data))
	{
		cout<<"data:"<<data<<endl;
	}

	for(int i = 0; i < 10; i++)
	{
		_stack.push(i);
	}
	if(_stack.push(11))
	{
		cout<<"success push stack:11"<<endl;
	}	

	for(int i = 0; i < 11; i++)
	{
		int Data;
		if(_stack.pop(&Data))
		{ 
			cout<<"Data:"<<Data<<endl;
		}
		else
		{
			cout<<"failed pop stack top:"<<_stack.get_top()<<endl;
		}

	}

	return 0;
}

代码中还有好多个函数没有实现,例如判断栈是否满,有参构造函数等等....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值