用链表实现的动态数组的插入、删除、查询等操作
头文件(array.h)
#ifdef ARRAY_H#define ARRAY_H
class DynamicArray{public: DynamicArray(int alen=10,int *aData=NULL,int aSize=10): m_alen(alen),m_aData(aData),m_aSize(aSize){};
~DynamicArray(){};
DynamicArray(const DynamicArray &aRef);
void assign(const DynamicArray &aRef);// 用一个动态数组的对象的值去修改另外一个对象
void append(int aValue);//添加
bool remove(int aIndex); //删除下标为aIndex的数组元素
bool insert( int aIndex, int aVal );//在aIndex位置的元素后面插入新元素
bool remove(int aIndex, int aValue); //从下标为aIndex的元素开始查找,删除所有值为aValue的元素
const int *begin() const; //返回第一个数组元素的指针 const int *end() const; //返回最后一个元素的指针
int at(const int aIndex) const; //返回下标为aIndex的数组元素
private:
int m_alen;//已存的数组长度 int m_aSize;//数组的存储空间长度 int *m_aData;//数组首地址
};#endif主函数(main.cpp)
/*功能:动态数组日期:2013-10-19*/#include <iostream>#include "array.h"using namespace std;
int main(void){ DynamicArray arr1,arr2; int Num,Num2; cout<<"请输入数组元素的个数:"; cin>>Num; arr1(Num); DynamicArray arr2(arr1); cout<<"请输入需要添加的元素"; cin>>Num; arr2.append(Num); cout<<"请输入需要删除的元素下标:"; cin>>Num; arr2.remove(Num); cout<<"请输入需要插入新元素的前一个下标及新元素的值:"; cin>>Num>>Num2; arr2.insert(Num,Num2); cout<<"请输入需要寻找元素的起始下标以及删除的值:"; cin>>Num>>Num2; arr2.remove(Num,Num2); cout<<"第一个数组元素的指针为:"<<arr2.begin()<<endl; cout<<"最后一个元素的指针为:"<<arr2.begin()<<endl; cout<<"请输入需要返回的数组元素的下标:"<<arr2.begin()<<endl; cin>>Num; cout<<"下标为"<<NULL<<"的数组元素为:"<<arr2.at(Num)<<endl;
system("pause"); return 0;}
实现函数(array.cpp)
/*功能:动态数组相关功能实现函数日期:2013-10-19*/#include <iostream>#include "array.h"using namespace std;
DynamicArray::DynamicArray(int aSize){ if(aSize<0) { cout<<"size 必须为 positive"<<"且size的值为 10"<<endl; aSize=10; } m_aData = new int [aSize]; if (!m_aData) { exit(0); } m_aSize=aSize; m_alen=0;};DynamicArray::DynamicArray(const DynamicArray &aRef){ int i,n; n = aRef.m_aSize; m_aSize = n; m_aData = new int[n]; if (!m_aData) { exit(0); } m_aData = aRef.m_aData; for(int i=0;i<m_aSize;i++) { m_aData[i]=aRef.m_aData[i];
}
}// 用一个动态数组的对象的值去修改另外一个对象void DynamicArray::assign(const DynamicArray &aRef){ int i; for(i=0;i<aRef.m_aSize;i++) { m_aData[i]=aRef.m_aData[i]; }}//添加void DynamicArray::append(int aValue){ if (m_alen == m_aSize) { m_aSize = new int (m_aSize+m_aSize) } m_aData[m_alen] = aValue; m_alen++;
}//删除下标为aIndex的数组元素bool DynamicArray::remove(int aIndex){ int i=0; for(i=aIndex;i<m_alen-1;i++) { m_aData[i] = m_aData[i+1]; } m_alen--;
return true;}//在aIndex位置的元素后面插入新元素bool DynamicArray::insert( int aIndex, int aVal ){
if (m_alen == m_aSize) { m_aSize+=m_aSize; m_aData = new int(m_aSize+=m_aSize); m_aData[m_aSize] = aVal; return true; } else { for (int i=aIndex;i<m_alen-1;i++) { int tmp = m_aData[i+1]; m_aData[i+1] = aVal; aVal = tmp; } m_alen++; m_aData[m_alen] = aVal; return true; }
}//从下标为aIndex的元素开始查找,删除所有值为aValue的元素bool DynamicArray::remove(int aIndex, int aValue){ int i; for(i=aIndex;i<m_alen;i++) { if (m_aData[i] == aValue) { remove(i); } } return true;}//返回第一个数组元素的指针const int * DynamicArray::begin() const{ return &m_aData;}//返回最后一个元素的指针const int* DynamicArray::end() const{ return &m_aData[m_alen-1];}//返回下标为aIndex的数组元素int DynamicArray::at(const int aIndex) const{ return m_aData[aIndex];}
评论