用链表实现的动态数组的插入、删除、查询等操作
#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
/*
功能:动态数组
日期: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;
}
/*
功能:动态数组相关功能实现函数
日期: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];
}