码迷,mamicode.com
首页 > 编程语言 > 详细

利用C++类实现顺序表

时间:2016-03-12 23:11:27      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:数据结构 顺序表 c++

以前写过用C语言实现的顺序表,现在来看看用C++类实现的吧

class SeqList
{
public:
	SeqList(int capacity=DEFAULT_CAPACITY)
		:_capacity(capacity)
		,_size(0)
		,_pData(0)
	{
		_pData=new DataType[_capacity];
	}

	~SeqList()
	{
		if(_pData!=NULL)
		{
			delete[] _pData;
		}
	}

	SeqList(const SeqList& s)
		:_size(s._size)
		,_capacity(s._capacity)
	{
		_pData=new DataType[_capacity];
		memcpy(_pData,s._pData,_size*sizeof(DataType));
	}

	SeqList& operator=(const SeqList& s)
	{
		if(this != &s)
		{
			delete[] _pData;
			_pData=new DataType[s._capacity];
			memcpy(_pData,s._pData,s._size*sizeof(DataType));
			_size=s._size;
			_capacity=s._capacity;
		}
		return *this;
	}

	void PushBack(const DataType& d)
	{
		_CheckCapacity();
		_pData[_size++]=d;
	}

	void PushFront(const DataType& d)
	{
		_CheckCapacity();
		int start=_size-1;
		while(start>=0)
		{
			_pData[start+1]=_pData[start];
			start--;
		}
		_pData[0]=d;
		_size++;
	}

	void PopBack()
	{
		if(_pData!=NULL)
		{
			_pData[_size--];
		}
	}

	void PopFront()
	{
		if(_pData!=NULL)
		{
			for(int i=0; i<_size-1; i++)
			{
				_pData[i]=_pData[i+1];
			}
			_size--;
		}
	}

	DataType& operator[](int index)
	{
		return ( _pData[index]);
	}

	int Find( const DataType& d)
	{
		int i=0;
		for(i=0; i<_size-1; i++ )
		{
			if(_pData[i]==d)
			{
				return i;
			}
		}
		return -1;
	}

	void Insert(int pos,const DataType& d)
	{
		assert(pos>=0 && pos<_size);
		int move=_size-pos;
		int end=_size;
		_CheckCapacity();
		while(move--)
		{
			_pData[end]=_pData[end-1];
			end--;
		}
		_pData[pos]=d;
		_size++;
	}

	void Remove(const DataType& d)
	{
		int pos=Find(d);
		int i=0;
		if(pos!=-1)
		{
			for(i=pos; i<_size-1; i++)
			{
				_pData[i]=_pData[i+1];
			}
			_size--;
		}
	}

	void Reverse()
	{
		int left=0;
		int right=_size-1;
		while(left<right)
		{
			DataType tmp=_pData[left];
			_pData[left]=_pData[right];
			_pData[right]=tmp;
			left++;
			right--;
		}
	}

	friend ostream& operator<<(ostream& os,const SeqList& s);


private:
	int _capacity; //线性表容量
	int _size;    //所含数据个数
	DataType *_pData;
	void _CheckCapacity()
	{
		if(_size==_capacity)
		{
			DataType *tmp=new DataType[_capacity+DEFAULT_CAPACITY ];
			memcpy(tmp,_pData,_size*sizeof(DataType));
			delete[] _pData;
			_pData=tmp;
			_capacity=_capacity+DEFAULT_CAPACITY ;
		}
	}

};

ostream& operator<<(ostream& os,const SeqList& s)
{
	int i=0;
	for(i=0; i<s._size; i++)
	{
		os<<s._pData[i]<<‘ ‘;
	}
	os<<endl;
 return os;
}


本文出自 “七月朔风” 博客,请务必保留此出处http://luminous.blog.51cto.com/10797288/1750291

利用C++类实现顺序表

标签:数据结构 顺序表 c++

原文地址:http://luminous.blog.51cto.com/10797288/1750291

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!