定义一元素为整数的动态数组类,并在主函数中调用各个功能:
数据成员:指向元素首地址的指针(用于存储动态申请的数组空间)、当前数组的容量、当前元素的个数;
成员函数:
带参/无参构造函数(无参的动态申请10个元素空间并改变当前数组的容量、当前元素的个数值;带参的按参数处理);
在尾部增加一元素;
修改指定位置上的元素值;
查询指定数据的元素是否存在;
输出所有数组中的元素; 增加数组容量(动态申请新容量数组空间、将原来数组空间中的元素复制到新空间并修改当前数组的容量值,释放delete原来数组空间);
析构函数(释放动态申请的数组空间);
二分查询指定数据的元素并返回原始所处的位置(选作,首先在函数内定义一个结构体数组,临时存放当前元素值和位置。其次,使用sort函数对结构体数组排序,最后,利用二分(折半)查找方法找指定元素是否存在。存在,返回原始位置值。否则,返回-1。返回前释放结构体数组的空间)。
#include<iostream>
#include<algorithm>
using namespace std;
struct IntX
{
int Idata;
int Iaddr;
} *w;
bool cmp(IntX x,IntX y)
{
return x.Idata<y.Idata;
}
class IntNum
{
private:
int *a;
int n;
int m;
public:
IntNum()
{
a=new int[10];
n=10;
m=0;
}
IntNum(int nn)
{
a=new int[nn];
n=nn;
m=0;
}
void Add(int data);
int XG(int k,int data);
int search(int data);
void show();
void ISort();
int Find(int data);
void print();
~IntNum()
{
delete []a;
}
void IntAdd();
};
void IntNum::show()
{
cout<<"num:"<<m<<endl;
cout<<"size:"<<n<<endl;
}
void IntNum::Add(int data)
{
if(m<n)
{
a[m]=data;
m++;
}
else
{
IntAdd();
a[m]=data;
m++;
}
}
int IntNum::XG(int k,int data)
{
if(k>=0&&k<m)
{
a[k]=data;
return 1;
}
else
{
return 0;
}
}
int IntNum::search(int data)
{
int i;
for(i=0;i<m;i++)
{
if(a[i]==data)
return 1;
}
if(i>=m)
{
return 0;
}
return 1;
}
void IntNum::print()
{
for(int i=0;i<m;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
void IntNum::IntAdd()
{
int *p=new int[n+10];
for(int i=0;i<m;i++)
{
p[i]=a[i];
}
delete []a;
a=p;
n=n+10;
}
void IntNum::ISort()
{
w=new IntX[m+1];
for(int i=0;i<m;i++)
{
w[i].Idata=a[i];
w[i].Iaddr=i;
}
sort(w,w+m,cmp);
for(int i=0;i<m;i++)
{
cout<<w[i].Idata<<" "<<w[i].Iaddr<<endl;
}
}
int IntNum::Find(int data)
{
int mid;
int l=0,r=m;
while(l<=m)
{
mid=(l+r)/2;
if(data<w[mid].Idata)
{
r=mid-1;
}
else if(data>w[mid].Idata)
{
l=mid+1;
}
else
{
int temp;
temp=w[mid].Iaddr;
delete []w;
return temp;
}
}
}
int main()
{
IntNum q;
IntNum p(6);
q.show();
p.show();
q.Add(5);
q.Add(9);
q.Add(6);
q.Add(11);
q.print();
q.show();
if(q.search(5))
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
if(q.search(8))
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
if(q.XG(1,7))
{
q.print();
}
else
{
cout<<"worry!"<<endl;
}
q.IntAdd();
q.show();
q.ISort();
cout<<q.Find(6)<<endl;
return 0;
}