动态数组类【例】

定义一元素为整数的动态数组类,并在主函数中调用各个功能:
数据成员:指向元素首地址的指针(用于存储动态申请的数组空间)、当前数组的容量、当前元素的个数;
成员函数:
带参/无参构造函数(无参的动态申请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;
}
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值