【数据结构】使用多态实现一个线性表

/*
 使用多态实现一个线性表(队列,串,堆栈)
 要求:
 具有线性表的基本操作:插入,删除,测长等。

  思路:
      队列,堆栈都以实现push,pop,测长等操作。
	  现在要求用多态实现,就要建立一个线性表的共性模板,来实现以上功能。
*/
#include<iostream>
using namespace std;
template<typename T>
class Tcontainer
{
public:
	virtual void push(const T& ) = 0;
	virtual void pop() = 0;
	virtual const T& begin() = 0;
	virtual const T& end() = 0;
	virtual size_t size()  = 0;
};


template<typename T>
class Tvector:public Tcontainer<T>
{
public:
	static const size_t _step  = 100 ;
	Tvector()
	{
		_size = 0;
		_cap = _step;
		buf = 0;
		re_capacity(_cap);
	}

	~Tvector()
	{
		free(buf);
	}

	void re_capacity(size_t s)
	{
		if(!buf)
		{
			buf = (T*)malloc(sizeof(T)*s);
		}
		else
			buf = (T*)realloc(buf,sizeof(T)*s);
	}

	virtual void push(const T& v)
	{
		if(_size >= _cap)
		{
			re_capacity(_cap += _step);
		}

		buf[_size++]  = v;
	}

	virtual void pop()
	{
		if(_size)
		{
			_size--;
		}
	}

	virtual const T& begin()
	{
		return buf[0];
	}

	virtual const T& end()
	{
		if(_size)
			return buf[_size -1];
	}

	virtual size_t size()
	{
		return _size;
	}

	const T& operator[] (size_t i)
	{
		if( i >= 0 && i < _size)
		{
			return buf[i];
		}
	}
private:
	size_t _size;
	size_t _cap;
	T* buf;
};


int main()
{
	Tvector<int> v;
	for(int i = 0; i < 100; ++i )
	{
		v.push(i);
	}

	for(int i = 0; i<100;++i)
	{
		cout<<v[i]<<endl;
	}
	return 0;
}
	  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值