【數據結構】使用多態實現一個線性表

/*
 使用多態實現一個線性表(隊列,串,堆棧)
 要求:
 具有線性表的基本操作:插入,刪除,測長等。

  思路:
      隊列,堆棧都以實現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;
}
	  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章