-
大小: 374KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-08
- 語言: C/C++
- 標(biāo)簽: 數(shù)據(jù)結(jié)構(gòu)??
資源簡介
題目:
7. 集合運(yùn)算 (單循環(huán)鏈表)
1.問題描述:
設(shè)有兩個(gè)帶頭結(jié)點(diǎn)的單循環(huán)鏈表存儲(chǔ)的集合A、B,其元素類型為字符或者整形,且以非遞減方式存儲(chǔ),其頭結(jié)點(diǎn)分別為ha、hb。要求下面各問題中的結(jié)果集合同樣以非遞減方式存儲(chǔ),結(jié)果集合不影響原集合。
2.實(shí)現(xiàn)要求:
⑶ 編寫集合元素測試函數(shù)IN_SET,如果元素已經(jīng)在集合中返回0,否則返回1;
⑷ 編寫集合元素輸入并插入到單鏈表中的函數(shù)INSERT_SET,保證所輸入的集合中的元素是唯一且以非遞減方式存儲(chǔ)在單循環(huán)鏈表中;
⑶ 編寫求集合A、B的交C=A∩B的函數(shù),并輸出集合C的元素;
⑷ 編寫求集合A、B的并D=A∪B的函數(shù),并輸出集合D的元素;
⑸ 求集合A與B的對稱差E=(A-B)∪(B-A) 的函數(shù),并輸出集合D的元素;
⑹ 設(shè)計(jì)一個(gè)菜單,具有輸入集合元素、求集合A、B的交C、求集合A、B的并D、求集合A與B的對稱差E、退出等基本的功能。
3.測試數(shù)據(jù):字符型和整形由同學(xué)們自定,但集合A、B的元素個(gè)數(shù)不得少于15個(gè)。

代碼片段和文件信息
#include?
#include
#include
#include
using?namespace?std;
typedef?char?DataType;?
typedef?struct?Aggreage//集合結(jié)構(gòu)體
{
DataType?element;//元素
struct?Aggreage?*next;
}SAggreage;
int?print_Aggreage(SAggreage?*head);//輸出一個(gè)集合?
void?AggreageInitiate(SAggreage?**head);//初始化函數(shù)(創(chuàng)建頭結(jié)點(diǎn))
int?IN_SET(SAggreage?*headDataType?elem);//判斷A元素是否在這個(gè)集合中
int?newspace(SAggreage?**headDataType?elem);//給結(jié)點(diǎn)開辟空間?
int?isempty(SAggreage?*head);//判斷該集合是否為空
int?INSERT_SET(SAggreage?*headDataType?elem);//插入唯一元素
int?create(SAggreage?**head);
SAggreage*?Intersection(SAggreage*?ASAggreage*?B);//交?
SAggreage*?Union(SAggreage*?ASAggreage*?B);//并?
SAggreage*?Unionn(SAggreage*?ASAggreage*?B);
SAggreage*?Difference(SAggreage*?ASAggreage*?B);//差
void?load(SAggreage*?haSAggreage*?hb);//讀文件數(shù)據(jù)到鏈表
void?save(SAggreage*?haSAggreage*?hb);//保持鏈表數(shù)據(jù)到文件中
//菜單
void?mainmenu()
{
cout<<“==============================集合運(yùn)算==============================“< cout<<“||????????????1.交????????????2.并???????????????3.對稱差?????????||“< cout<<“||????????????4.輸入集合AB????5.導(dǎo)入集合AB???????6.查看集合???????||“< cout<<“||????????????7.保存集合AB????8.退出程序??????????????????????????||“< cout<<“====================================================================“< }
void?menu6()
{
cout<<“=======================查看集合=======================“< cout<<“||?????????????????1.集合A????2.集合B???????????????||“< cout<<“||?????????????????3.返回上一級菜單?????????????????||“< cout<<“======================================================“< }
//初始化函數(shù)(創(chuàng)建一個(gè)頭指針)
void?AggreageInitiate(SAggreage?**head)
{
*head?=?(SAggreage?*)malloc(sizeof(SAggreage));
(*head)->next?=?*head;//循環(huán)單鏈表//之前:(*head)->next?=?head;
}
//判斷A元素是否在這個(gè)集合中
int?IN_SET(SAggreage?*headDataType?elem)
{
int?flag?=1;//初始假設(shè)集合中沒有這個(gè)元素,檢查到有后再將標(biāo)志改為0;
//如果元素已經(jīng)在集合中返回0,否則返回1;
SAggreage?*p?=?head;
while(p->next?!=?head)//從頭指針開始,當(dāng)p不是最后一個(gè)的時(shí)候(只有頭指針的話,不執(zhí)行里面的語句)
{
p?=?p->next;//p指向下一個(gè)(從第一個(gè)數(shù)據(jù)開始),到最后一個(gè),如果中間有和a元素一樣的,就break
//返回0,否則返回1;(是1就可以繼續(xù)添加)
if(p->element?==?elem)
{
flag?=?0;
break;
}
}
return?flag;
}
//開辟一塊內(nèi)存的函數(shù)(后來根據(jù)功能和代碼重復(fù)出現(xiàn)的次數(shù)自己添加的函數(shù))
int?newspace(SAggreage?**headDataType?elem)//////////?int?newspace(SAggreage?*headDataType?elem)
{
//cout<<“辟一塊內(nèi)存的函數(shù)“?< SAggreage?*p?=?*head;//////////////////?head;
SAggreage?*s;
s?=?(SAggreage?*)malloc(sizeof(SAggreage));
s->element?=?elem;
s->next?=?p->next;
p->next?=?s;
return?1;
}
//判斷該集合是否為空(判斷頭指針的下一個(gè)是否為頭指針)
int?isempty(SAggreage?*head)
{
//是空返回1
//int?num;
SAggreage?*p?=?head;
if(p->next?==?head)//if(p->next?=?head)應(yīng)該是==,哎,搞死我了
{
return?1;
}
else
{
return?0;
}
}
//插入唯一元素
int?INSERT_SET(SAggreage?*headDataType?elem)//SAggreage?*head因?yàn)槭侵羔槪薷牧艘部梢员4鏀?shù)據(jù),
//若插入成功則返回1,否則返回0;
{
//cout<<“進(jìn)入插入唯一元素的函數(shù)“< //1.先檢查集合中是否有這個(gè)元素//&head還是head
if
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????????10??2019-04-01?09:21??集合運(yùn)算\B.txt
?????文件??????18580??2019-04-01?09:17??集合運(yùn)算\ccc.cpp
?????文件????1929440??2019-04-01?09:28??集合運(yùn)算\ccc.exe
?????文件?????????10??2019-04-01?09:21??集合運(yùn)算\A.txt
?????目錄??????????0??2019-04-01?09:39??集合運(yùn)算
-----------?---------??----------?-----??----
??????????????1948040????????????????????5
評論
共有 條評論