下载此文档

C集合类.docx


文档分类:IT计算机 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
该【C集合类 】是由【飞行的笑笑】上传分享,文档一共【7】页,该文档可以免费在线阅读,需要了解更多关于【C集合类 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。会合的观点在数学中,,这一种有序种类称为该会合的基种类.

一个
讲堂练****设计一个会合类numSet,寄存有序的整型数序,此中的元素按从小到大的次序摆列而且不包含同样的元素,要求:
1)向数序中增添元素(过滤重复数据)并保拥有序
2)从数序中查找数据元素并删除
剖析:
数据成员:intcount;//
inta[MAX];//
成员函数:voidaddnum(intn);
v0iddelenum(intn);//
numSet( ){count=0;}//
voiddisp( );//
测试数据:numSetset1,set2;

//

数序中元素的个数
寄存数序的数组
向有序数组中增添元素
从有序数组中查找元素并删除
结构函数
输出有序数组
(3);
(2);
(1);
( );
(2);
( );
3)求两个整数数序的归并数序
剖析:增添友元函数:
friendnumSetunionset(numSet&s1,numSet&s2);
返回s1与s2归并的结果
即:S={s1,s2}
s1:

i=0

i<count

i++
s2:

j=0

j<count

j++
[i][j]
例:set3=unionset(set1,set2)
set1:{1,2,3}
set2:{2,4,5,6}
set3:{1,2,3,4,5,6}
#include<iostream>
usingnamespacestd;
constintMAX=20;
classNumset
{

比较确立增添次序
;
friendNumsetunionset(Numset&s1,Numset&s2);//

归并数序

s1

和s2
intcount;
inta[MAX];
public:
Numset( ){count=0;}
voidaddnum(intn)
{
inti=0,j;
while(i<count)
if(n>a[i])i++;
elsebreak;
条件归并可简化逻辑while(i<count&&n>a[i])i++;if(n==a[i])return;
for(j=count;j>i;j--)a[j]=a[j-1];
a[i]=n;
count++;
}
voiddisp( )
{
for(inti=0;i<count;i++)
cout<<a[i]<<"";
cout<<endl;
}
intgeti(inti){returna[i];}
};
Numsetunionset(Numset&s1,Numset&s2)
{
Numsets;
inti=0,j=0;
while(i<&&j<)
{
intv1=[i];
intv2=[j];
if(v1<v2){(v1);i++;}
elseif(v1>v2){(v2);j++;}
else{(v1);i++;j++;}
}
while(i<)
{
intv1=[i];
(v1);
i++;
}
while(j<)
{
intv2=[j];
(v2);
j++;
}
returns;
}
intmain( )
{
Numsetset1,set2,set3;
(1);
(3);
(2);
(6);
cout<<"

数序一为:

"<<endl;
( );
(3);
(5);
(7);
(4);
cout<<"

数序二为:

"<<endl;
( );
set3=unionset(set1,set2);
cout<<"

数序一与数序二归并为:

";
( );
return0;
}
练****1、
要求:定义一个会合类,要求:
(1)会合中的元素可用数组寄存,也可用链表寄存,
参照提示:用数组寄存时,会合中数据成员①元素个数②数组(定义时用最大值)
用链表寄存时,会合中数据成员①元素个数②*指针(定义时指向结点种类

)
结构函数要求:能够经过从键盘上输入数据的形式,给会合中各元素赋值
要求能实现显示会合中元素个数
能显示会合中的元素
能向会合中增添元素
能从会合中删除元素
能实现两个会合的+(U)相并
能实现两个会合的×( )订交
能实现两个会合的(差集)
在主函数中实现上述功能(创立对象,输入会合中元素,显示元素及个数,能增、删元素,实现会归并、交、差)
练****2
要求:设计一个会合类Set,并重载运算符+、-以分别实现会合的并、差操作。此外设计一个主函数演示Set的使用。
练****3:
设计一个会合类Set,包含将会合置空、增添元素、判断元素能否在会合中、输出会合,以及将会合中元素逆置,此外还有一个拷贝结构函数,并使用一些数据进行测试。
解:
Set类包含私有数据成员elems(寄存会合元素)、pc(目前元素指针),一个默认结构函数和拷贝结构函数Set(Set&s),还有成员函数empty( )(将会合置空)、isempty( )(判断会合能否为空)、ismemberof( )(判断元素能否在会合中)、add( )(增添元素)、print( )(输出会合)、reverse(将会合中元素置逆)。
#include<>
#defineMax100
classSet
{
public:
Set( ){pc=0;}
Set(Set&s);//对象引用作为参数
voidempty( ){pc=0;}
intisempty( ){returnpc==0;}
intismemberof(intn);
intadd(intn);
voidprint( );
voidreverse( );
private:
intelems[Max];
intpc;
};
intSet::ismemberof(intn)
{
for(inti=0;i<pc;i++)
if(elems[i]==n)
return1;
return0;
}
intSet::add(intn)
{
if(ismemberof(n))
return1;
elseif(pc>Max)
return0;
else
{
elems[pc++]=n;
return1;
}
}
Set::Set(Set&p)
{
pc=;
for(inti=0;i<pc;i++)
elems[i]=[i];
}
voidSet::print( )
{
cout<<"{";
for(inti=0;i<pc-1;i++)
cout<<elems[i]<<",";
if(pc>0)
cout<<elems[pc-1];
cout<<"}"<<endl;
}
voidSet::reverse( )
{
intn=pc/2;
for(inti=0;i<n;i++)
{
inttemp;
temp=elems[i];
elems[i]=elems[pc-i-1];
elems[pc-i-1]=temp;
}
}
voidmain( )
{
SetA;
cout<<"A能否为空:";cout<<( )<<endl;
cout<<"A:";( );
SetB;
for(inti=1;i<=8;i++)
(i);
cout<<"B:";( );
cout<<"5能否在B中:";cout<<(5)<<endl;
( );
for(intj=11;j<20;j++)
(j);
SetC(B);
cout<<"C:";( );
( );
cout<<"C逆置"<<endl;
cout<<"C:";( );
}
练****4:
要求:输入两个数组,并对元素过滤,实现交,并,差(还能够用混淆运算)
,会合的元素限制为小写字母字符[‘a’..’z’],。会合输入的形式为一个以“回
车符”为结束标记的字符串,串中字符次序不限,且同意出现重复字符或非法字符,程序应
能自动滤去。输出的运算结果字符串中将不含重复字符或非法字符。
,即在计算机终端上显示“提示信息”以后,
由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入中的非法字符)
和运算结果显示在后来。

(1)L1=”magazine”,L2=“paper”,
L1∪L2=”aegimnprz”,L1∩L2=”ae”,L1-L2=”gimnz”;
(2)L1=”012oper4a6tion89”,L2=”errordata”,
L1∪L2=”adeinoprt”,L1∩L2=”aeort”,L1-L2=”inp”。
程序1:
structSET//定义结构
{
charch;
SET*next;
};
voiddisplay(SET*phead)//phead为链首指针
{
if(phead==NULL)
cout<<"空集";
else
while(phead)
{
cout<<phead->ch;
phead=phead->next;
}
cout<<endl;
};
/*———————————————成立链表—————————————————*/
SET*build( )
{
SET*ps;//目前节点指针
SET*pend;//链尾指针
SET*pd;//中间指针
SET*head;
chartem[20];//输入寄存变量
inti;
ps=newSET;//开拓堆内存
(tem,sizeof(tem));//
head=NULL;
pend=ps;
for(i=0;i<20;i++)//输入链表元素
{
if(tem[i]>='A'&&tem[i]<='z')//

接收字符串
过滤非字母元素
ps->ch=tem[i];
if(head==NULL)//判断链首能否为空
{
head=ps;//为空则将元素做为链首
ps->next=NULL;
gotoonemore;
}
pd=head;
while(pd)
{
if(pd->ch==ps->ch)gotoagain;//删除重复的元素,重复则进入下一次循环,不插入
pd=pd->next;
}
{
if(head->ch>ps->ch)//插入一个结点
{//若结点比链首小,则该结点成为新链首
ps->next=head;
head=ps;
gotoonemore;
}
elseif(pend->chch)//若结点比链尾大,则该结点成为新链尾
{
pend->next=ps;
pend=ps;
pend->next=NULL;
}
else//若比链首大,比链尾小,则与中间元素比较摆列
{
pd=head;
while(pd->next&&pd->next->chch)
pd=pd->next;
ps->next=pd->next;
pd->next=ps;
}
}
onemore:ps=newSET;
again:continue;
}
deleteps;//删除ps
returnhead;//返回链首地点
};
/*————————————————————成立链表————————————

*/

C集合类 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数7
  • 收藏数0 收藏
  • 顶次数0
  • 上传人飞行的笑笑
  • 文件大小19 KB
  • 时间2023-01-11