ADT—变长数组

Posted on 2010-03-29 08:41  625747  阅读(298)  评论(0)    收藏  举报
代码
#pragma once

template
<typename K>
class anArray
{
public:
anArray();
~anArray();
void add(K addData);
void Insert(int index,K insertData);//插入
void sort();
int GetMin();//取数组最小值
int GetMax();//取数组最大值
void remove(int index);//删除
int getLength() ;
void showArray();

private:
void changeLength();
int arraySize;
K
* Array;
};

template
<typename K>
anArray
<K>::anArray()
{
arraySize
= 0;
Array
= new K [3];
}

template
<typename K>
anArray
<K>::~anArray()
{
delete [] Array;
}

template
<typename K>
void anArray<K>::add(K addData)
{
K
* oldArray = Array;

arraySize
++;
if(arraySize >= 3)
{
changeLength();
}
Array[arraySize
- 1] = addData;
}

template
<typename K>
int anArray<K>::getLength()
{
return arraySize;
}

template
<typename K>
void anArray<K>::Insert(int index,K insertData)
{
if(index <= arraySize)
{
arraySize
++;
changeLength();

for(int pos = arraySize;pos >= index;pos--)
Array[pos]
= Array [pos-1];
Array [ index
-1] = insertData;
}
else
{
cout
<<"Insert("<<index<<","<<insertData<<"):Falled"<<endl;
}

}

template
<typename K>
void anArray<K>::showArray()
{
for (int i=0;i < arraySize;i++)
std::cout
<< Array [i] << std::endl;
}

template
<typename K>
void anArray<K>::changeLength()
{
K
* oldArray = Array;
Array
= new K [arraySize+4];
for (int index = 0;index <arraySize; ++index)
Array [ index ]
= oldArray [ index];
delete oldArray;
}

template
<typename K>
void anArray<K>::sort()
{
int temp;
for(int i=0;i<arraySize-1;i++)
{
for(int j = i+1;j<arraySize;j++)
{
if(Array [i] > Array [j])
{
temp
= Array[i];
Array [i]
= Array [j];
Array [j]
= temp;
}
}
}

}