栈的c++模板实现

在我们软件开发中,经常要用到栈这个重要的数据结构,栈是一种先进后出的线性结构,以前见过很多人在网上写的例子,都是基于基本数据类型的,而在我们的实际开发中,大部分都是基于特定的类型,我们不可能为每一种数据写一个版本,那样太累了,可扩展性也不好,所以就必须要用模板来实现。

下面是实现的代码,有写的不好和不完善的地方,大家一起讨论:

#pragma once
#include <stdlib.h>

template<class ETYPE>
class Stack
{
public:
	Stack(void);
	~Stack(void);

	int push(const ETYPE& e);		//将元素压入栈
	int pop(ETYPE &e);				//将栈顶元素出栈
	int isEmpty() const				//判断栈是否为空
	{
		return top == -1;
	}

	int isFull() const			//判断栈是否满
	{
		return top == size-1;
	}

	ETYPE operator [] (int index);

	int Size() const
	{
		return top + 1;
	}

	ETYPE* getData() const;		//获得数据
	

private:
	int size;		//元素个数
	int top;		//栈顶指针
	ETYPE *stackPtr;	//指向栈顶元素的指针
};

//定义部分
template<class ETYPE>
Stack<ETYPE>::Stack(void)
{
	size = 100;
	top = -1;
	stackPtr = new ETYPE[size]; 
}

template<class ETYPE>
Stack<ETYPE>::~Stack(void)
{
	delete [] stackPtr;
}

template<class ETYPE>
int Stack<ETYPE>::push(const ETYPE &e)
{
	//如果栈已经满,则追加空间
	if (isFull())
	{
		stackPtr = (ETYPE *)realloc(stackPtr,(size+10)*sizeof(ETYPE));
		stackPtr[++top] = e;
		size += 10;			//容量也加10
		return 1;
	}
	else
	{
		stackPtr[++top] = e;
		return 1;
	}
	return 0;
}

template<class ETYPE>
int Stack<ETYPE>::pop(ETYPE &e)
{
	if (!isEmpty())
	{
		e = stackPtr[top--];
		return 1;
	}
	return 0;
}

template <class ETYPE>
ETYPE Stack<ETYPE>::operator[](int index)
{
	return stackPtr[index];
}

template <class ETYPE>
ETYPE* Stack<ETYPE>::getData() const
{
	return stackPtr;
}

这样我以后就可以每次都用这个代码了   不用改过来改过去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值