1. 程式人生 > >c++ 集合的增刪改查

c++ 集合的增刪改查

析構函數 排序 vat stream pau 數組下標 end 重復數據 lte

#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

  

c++ 集合的增刪改查