c++ 集合的增删改查

#if 1
#include <iostream>
#include <stdlib.h>

using namespace std;

class List
{
public:

	//默认构造函数集合大小为6个元素
	List();

	//构造函数重载,可接受参数,改变集合大小
	List(int size)
	{ 
		Length=size;
		str=new int[Length+1];				    //在堆里申请空间
		cout<<"请输入整数集合(每输入一个按Enter):";
		cout<<endl; 

		//读入六位数据,重复数据删除
		for(int i=0;i<Length;i++)  
		{
			 cin>>str[i];			//读入六位数据
			 //若输入数据重合,不录入该数据
			 for(int j=0;j<i;j++)
			 {
				 
				 if(str[j]==str[i])
				 {
					 i--;
					 cout<<"输入非法,请再次输入,此次重复的集合元素是: "<<str[j]<<endl;
					 break;
				 }
			 }
		}
		cout<<"集合为:";
		print();	
		
	}

	//析构函数释放str,
	~List()
	{
		delete []str;
	}
	//打印数据
	void print();
	//集合元素增加
	void add();
	//集合元素删除
	void dlt();
	//集合元素修改
	void alter();
	//查找元素
	void Seek();
private:
	int *str;   //集合
	int Length; //数组集合的大小
};

//打印数据同时排序
void List::print()
{

	//冒泡排序
	for(int i=0;i<Length;i++)
	{
		for(int j=0;j<Length-i-1;j++)
		{
			if(str[j]>str[j+1])
			{
				int temp=str[j];
				str[j]=str[j+1];
				str[j+1]=temp;
			}
		}
	}
	//打印数据
	cout<<'{';
	for(int i=0;i<Length;i++)
	{
		cout<<"  "<<"'"<<str[i]<<"'"<<"  ";
	}
	cout<<'}'<<endl;
}

//构造函数初始化
List::List()
{
	//输入数据
	Length=6;			         	//初始化
	str=new int[Length+1];				    //在堆里申请空间
	cout<<"请输入整数集合(每输入一个按Enter):";
	cout<<endl; 

	//读入六位数据,重复数据删除
	for(int i=0;i<Length;i++)  
	{
		 cin>>str[i];			//读入六位数据
		 //若输入数据重合,不录入该数据
		 for(int j=0;j<i;j++)
		 {
			 
			 if(str[j]==str[i])
			 {
				 i--;
				 cout<<"输入非法,请再次输入,此次重复的集合元素是: "<<str[j]<<endl;
				 break;
			 }
		 }
	}
	cout<<"集合为:";
	print();	
}

//增加数据
void List::add()
{
	int idx=0,loop=0; //查找数据时记录集合中相同元素的数组下标
	int data;  //插入数据

	do
	{
		cout<<"请输入你要增加的元素:";
		cin>>data;
		for(int i=0;i<Length;i++)
		{
			if(data==str[i])
			{
				idx=1;
				loop=1;
			}
		}
		if(!idx)
		{
			str[Length]=data; //输入数据不重合添加至数组末尾
			Length++;	     //数据增加
			loop=0;			//退出循环
			print();		//打印
		}
		else				//若输入重合重新输入
		{
			cout<<"输入非法,数据重合!"<<endl;
			idx=0;
		}
	}
	while(loop);
}

//删除数据
void List::dlt()
{
	int data,j=0,idx=0; //data是需要删除的数据,j是原数组下标从0开始,idx为元素存在的标志
	cout<<"请输入你要删除的元素:";
	cin>>data;

	for(int i=0;i<Length;i++)
	{
		if(data!=str[i]) //从第一个元素开始遍历,未找到删除数据进行数组赋值
		{
			str[j]=str[i];
			j++;
		}
		if(data==str[i])
			idx=1;
	}

	if(idx)
	   Length--;//数组元素减一
	else
	   cout<<"未找到该元素!!!"<<endl;
	print();
}

//修改数据
void List::alter()
{
	int temp,temp1,idx=0;							//temp要修改的值,temp1为修改的数据,idx为重合数据小标
	cout<<"请输入你要修改的值:";
	cin>>temp;
	cout<<"请输入变更值:";
	cin>>temp1;

	for(int i=0;i<Length;i++)
	{
		if(str[i]==temp1)
		{
			cout<<"变更数据非法,集合中已有该数据!!!"<<endl;
			idx=i;
			break;
		}
	}
	if(!idx)
	{
	  str[Length]=temp1;
	  Length++;
	}
	print();
}

//查询数据
void List::Seek()
{
	int i,data;		//data为查找的数据
	int idx=0;		//idx存放下标

	cout<<"请输入你要查找的数据: ";
	cin>>data;
	
	for(i=0;i<Length;i++)
	{
		if(str[i]==data)
		{
			idx=i+1;
			break;
		}
	}
	if(idx)
		cout<<"你查找的数据在"<<idx<<"个元素"<<endl;
	else
		cout<<"未找到该数据!!!"<<endl;

}

void main()
{
	List str;    //无参构造
	str.add();	 //增加元素
	str.dlt();   //删除元素
	str.alter(); //改变数据
	str.Seek();  //查找数据
	system("pause");

}
#endif

  

猜你喜欢

转载自www.cnblogs.com/huxiaobai/p/10564327.html