📄 darray.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 + -