利用C++类实现顺序表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用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++),能够实现功能即可,发邮箱413715076@qq.com

C++模版类实现普通类静态顺序表

顺序表(C++实现)

C++实现单链表

C++初阶模板

LRU(Least Recently Used最近最少使用)的c++实现(顺序表)