c++ 集合的增刪改查
阿新 • • 發佈:2019-03-20
析構函數 排序 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++ 集合的增刪改查