⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 darray.h

📁 类模板,助于参考及编写代码,代码以数据结构值的排序方式及链表操作为主.
💻 H
字号:
/*轻型模板数组
  提供与VC CArray类相似的功能,
  可以自动增大,按下标访问元素,
  符合数据结构--线性表规范,同时提供VC风格的编程接口*/

#ifndef DARRAY_H
#define DARRAY_H
template <class ADT/*元素数据类型*/>
class DArray 
{
protected:
	ADT *Head; //头指针
	int Count; //有用元素个数
	int Size;  //数组容量
	int Addition; //超界增量
public:
	DArray(int size=10/*元素个数*/)
	{
		Size=size;
		Head=new ADT[Size];
		Count=0;
		Addition=(int)((double)Size/2+0.5);
	}
	~DArray()
	{
		delete []Head;
	}
/*添加元素*/
	void AddTail(ADT data/*待添加元素*/)
	{
		if(Count<Size) Head[Count]=data;
		else
		{
			int i;
			Size+=Addition;
			ADT *head=new ADT[Size];
			for(i=0;i<Count;i++)
				head[i]=Head[i];
			head[Count]=data;
			delete []Head;
			Head=head;
		}
		Count++;
	}

	void AddHead(ADT data)
	{
		int i;
		if(Count<Size)
		{
			for(i=Count;i>0;i--)
				Head[i]=Head[i-1];
		}
		else
		{
			Size+=Addition;
			ADT *head=new ADT[Size];
			for(i=Count;i>0;i--)
				head[i]=Head[i-1];
			delete []Head;
			Head=head;
		}
		Head[0]=data;
		Count++;
	}

	void InsertAt(int index,ADT data)
	{
		int i;
		if(Count<Size)
		{
			for(i=Count;i>index;i--)
				Head[i]=Head[i-1];
		}
		else
		{
			Size+=Addition;
			ADT *head=new ADT[Size];
			for(i=0;i<index;i++) head[i]=Head[i];
			for(i=Count;i>index;i--)
				head[i]=Head[i-1];
			delete []Head;
			Head=head;
		}
		Head[index]=data;
		Count++;
	}

	void Alloc(int size)
	{
		if(Size<size)
		{
			Size=size;
			delete []Head;
			Head=new ADT[Size];
		}
		Count=Size;
	}

/*删除元素*/
	void RemoveTail()
	{
		Count--;
	}

	void RemoveHead()
	{
		int i;
        Count--;
		for(i=0;i<Count;i++)
			Head[i]=Head[i+1];
	}

	void RemoveAt(int index)
	{
		int i;
		Count--;
		for(i=index;i<Count;i++)
			Head[i]=Head[i+1];
	}

	void RemoveAll()
	{
		Count=0;
	}

	void Removes(int begin,int end)
	{
		int i,n=end-begin+1;
		Count-=n;
		for(i=begin;i<Count;i++) Head[i]=Head[i+n];
	}
/*设置/获取元素*/
	void SetAt(int index,ADT data)
	{
		Head[index]=data;
	}

	ADT GetAt(int index)
	{
		return Head[index];
	}

	ADT & operator [](int index)
	{
		return Head[index];
	}
/*杂项*/
	int GetCount() 
	{
		return Count;
	}

	int GetSize()
	{
		return Size;
	}

	void SetSize(int size)
	{
		ADT *head=new ADT[size];
		int i;
		if(Count>size) Count=size;
		for(i=0;i<Count;i++)
			head[i]=Head[i];
		delete []Head;
		Head=head;
		Size=size;
	}

	void SetAddition(int addition)
	{
		Addition=addition;
	}

	void Copy(DArray<ADT> *src)
	{
		int i;
		Count=src->GetCount();
		if(Count>=Size)
		{
			Size=Count;
			ADT *head=new ADT[Size];
			delete []Head;
			Head=head;
		}
		for(i=0;i<Count;i++)
			Head[i]=src->GetAt(i);
	}
};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -