ImageVerifierCode 换一换
格式:DOCX , 页数:49 ,大小:463.70KB ,
资源ID:8428226      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8428226.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(集合的并交差操作说明书.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

集合的并交差操作说明书.docx

1、集合的并交差操作说明书目 录摘 要 1前 言 2正 文 31. 采用类c语言定义相关的数据类型 32. 各模块的伪码算法 33. 函数的调用关系图 34. 调试分析 35. 测试结果 36. 源程序(带注释) 3总 结 4参考文献 5致 谢 6附件 部分源程序代码 7摘 要包括集合的输入、输出、删除集合中重复的元素、删除、修改,求两个集合的交、并、差。在Microsoft Visual C+ 中实现程序的调试这个程序实现集合中元素的录入、删除、修改、并、交、差等操作。采用单链表对集合进行操作、运行等。通过该题目的设计过程,可以进一步理解和熟练掌握课本中所学的各种数据结构的知识,加深对链表的认识

2、。学会如何把学到的知识用于解决实际问题,培养自己的动手能力。关键词: 集合;链表;前 言科学技术日新月异的进步,让人类生活发生了巨大的变化,计算机技术的飞速发展,使各行各业在计算机技术应用方面得到了广泛的普及和使用。在数学上的应运也同样在不断的发展,这里我们要做的是集合的简单操作,包括集合的交、并、差。经过分析,使我们使用易于与C+语言实现的Microsoft Visual C+开发工具,利用其提供的简单操作,首先在短时间内建立程序原形,然后,对初始原型程序需求分析,编写源程序,不断修正和改进,直到形成满足要求的可行程序。集合的操作是数据结构中最简单的操作,对集合的学习实践可以帮助我们加深对数

3、据结的掌握程度。本程序是用单链表来实现集合的。可以把一个集合抽象成单链表,可以对它进行插入、删除、单链表的合并等,来实现集合的简单操作。正 文1. 采用类c语言定义相关的数据类型class ListNode /结点类定义: private: int data; ListNode* link;class List /链表类定义: private: ListNode* head; ListNode* tail; string Name;2. 各模块的伪码算法void List:PrintData() /输出集合元素功能函数 ListNode* cur=NULL; cur=this-GetHead(

4、)-GetLink (); while(cur!=(this-GetTail()-GetLink() couttGetData (); cur=cur-GetLink(); coutSetLink(NULL); ListNode* preCurrent=head; ListNode* current=preCurrent-GetLink(); while(current!=NULL¤t-GetData()!=value) preCurrent=current; current=preCurrent-GetLink(); if(head=tail¤t=NULL) head

5、-SetLink(add); tail=add; if(head!=tail¤t=NULL) preCurrent-SetLink(add); add-SetLink(NULL); tail=add; if(current!=NULL¤t-GetData()=value) add-ListNode(); return ; void List:AddList(List* Set) /添加一串结点 ListNode* p=NULL; int c; p=Set-GetHead()-GetLink(); while(p!=Set-GetTail()-GetLink () c=p

6、-GetData(); this-Add(c); p=p-GetLink(); void List:Delete () /删除集合;delete p ListNode *p=NULL,*cur=NULL; cur=this-GetHead()-GetLink(); while(cur!=this-GetTail()-GetLink() p=cur; cur=cur-GetLink(); p-ListNode(); p=NULL; void List:Combine(List* C1) /求并 ListNode* p=NULL; p=(C1-GetHead()-GetLink(); while(

7、p!=(C1-GetTail()-GetLink() this-Add(p-GetData(); p=p-GetLink(); void List:Mix(List* Set) /求交 ListNode *p=NULL,*q=NULL,*del=NULL; int j=0; del=this-GetHead(); p=this-GetHead()-GetLink(); while(p!=this-GetTail()-GetLink() j=0; q=(Set-GetHead()-GetLink(); while(q!=Set-GetTail()-GetLink() if(p-GetData (

8、)=q-GetData () j=1; q=(q-GetLink (); if(j=0) del-SetLink(p-GetLink(); p-ListNode(); p=del-GetLink(); else del=p; p=(p-GetLink (); void List:Subtract (List* Set) /求差 ListNode *p=NULL,*q=NULL,*b=NULL; p=Set-GetHead()-GetLink(); q=this-GetHead()-GetLink(); b=this-GetHead (); while(p!=(Set-GetTail()-Get

9、Link() b=this-GetHead (); q=(this-GetHead ()-GetLink(); while(q!=(this-GetTail()-GetLink () if(p-GetData ()=q-GetData () b-SetLink (q-GetLink (); q-ListNode (); q=b-GetLink (); else b=q; q=q-GetLink (); p=p-GetLink ();3. 函数的调用关系图4. 调试分析a、 调试中遇到的问题及对问题的解决方法 调试中遇到了很多的问题,最为头疼的是:指针的越位,像这样的问题,在程序编译时不会出现错

10、误,当运行时往往出错,很难找到出错的地方,解决方法是:在程序运行时出错的功能去找,仔细的分析每一个指针看在运行时,会不会出现越位的情况,并改正。大家都知道,再用/编写程序时,指针是最为灵活的,用它可以解决很多问题,都再用指针式也伴随着很多的问题,向前面提到的越位,还有在市纺织真是错误的是放其他空间,对这样的问题,必须在申明指针时对其初始化()。除此之外,还有就是,对无用内存的释放,由于,内存的利用对电脑的运行很重要,所以,要对无用内存进行释放,以提高内存利用率。b、算法的时间复杂度和空间复杂度 该算法的时间复杂度是:O(N2)。该算法的空间复杂度是:572 KB。5. 测试结果1) 初始化界面

11、:2) 操作界面:3) 输入集合名和集合元素:4) 浏览系统中存在的集合及其元素:5) 删除集合:6) 修改元素输入有误的集合:7) 对系统中已有的集合进行求并运算:8) 对系统中已有的集合进行求交运算:9) 对系统中已有的集合进行求差运算:10) 退出集合运算系统:6. 源程序(带注释)#include#include#define SIZE 10using namespace std;class ListNode /结点类定义: private: int data; ListNode* link; public: ListNode():link(NULL) ListNode() ListN

12、ode(int value):link(NULL),data(value) void SetLink(ListNode* next)link=next; ListNode* GetLink()return link; int GetData()return data;class List /链表类定义: private: ListNode* head; ListNode* tail; string Name; public: List()head=tail=new ListNode;head-SetLink(NULL); List(string str); List() ListNode* G

13、etHead()return head; ListNode* GetTail()return tail; string GetName()return Name; void Add(int c); void PrintData(); void AddList(List* Set); void Combine(List* C1); void Mix(List* Set); void Subtract(List* S1); void ChangeHead(ListNode* cur); void ChangeTail(ListNode* cur); void ChangeName(string c

14、); bool Isempty(); void Delete();List:List(string str) Name=str; head=tail=new ListNode; head-SetLink(NULL);void List:PrintData() /输出集合元素功能函数 ListNode* cur=NULL; cur=this-GetHead()-GetLink (); while(cur!=(this-GetTail()-GetLink() couttGetData (); cur=cur-GetLink(); coutSetLink(NULL); ListNode* preCu

15、rrent=head; ListNode* current=preCurrent-GetLink(); while(current!=NULL¤t-GetData()!=value) preCurrent=current; current=preCurrent-GetLink(); if(head=tail¤t=NULL) head-SetLink(add); tail=add; if(head!=tail¤t=NULL) preCurrent-SetLink(add); add-SetLink(NULL); tail=add; if(current!=NU

16、LL¤t-GetData()=value) add-ListNode(); return ; void List:AddList(List* Set) /添加一串结点 ListNode* p=NULL; int c; p=Set-GetHead()-GetLink(); while(p!=Set-GetTail()-GetLink () c=p-GetData(); this-Add(c); p=p-GetLink(); bool List:Isempty() if(this-GetHead()-GetLink()=(this-GetTail()-GetLink()return 1

17、; else return 0;void List:Delete () /删除集合;delete p ListNode *p=NULL,*cur=NULL; cur=this-GetHead()-GetLink(); while(cur!=this-GetTail()-GetLink() p=cur; cur=cur-GetLink(); p-ListNode(); p=NULL; void List:Combine(List* C1) /求并 ListNode* p=NULL; p=(C1-GetHead()-GetLink(); while(p!=(C1-GetTail()-GetLink

18、() this-Add(p-GetData(); p=p-GetLink(); void List:Mix(List* Set) /求交 ListNode *p=NULL,*q=NULL,*del=NULL; int j=0; del=this-GetHead(); p=this-GetHead()-GetLink(); while(p!=this-GetTail()-GetLink() j=0; q=(Set-GetHead()-GetLink(); while(q!=Set-GetTail()-GetLink() if(p-GetData ()=q-GetData () j=1; q=(q

19、-GetLink (); if(j=0) del-SetLink(p-GetLink(); p-ListNode(); p=del-GetLink(); else del=p; p=(p-GetLink (); void List:Subtract (List* Set) /求差 ListNode *p=NULL,*q=NULL,*b=NULL; p=Set-GetHead()-GetLink(); q=this-GetHead()-GetLink(); b=this-GetHead (); while(p!=(Set-GetTail()-GetLink() b=this-GetHead ()

20、; q=(this-GetHead ()-GetLink(); while(q!=(this-GetTail()-GetLink () if(p-GetData ()=q-GetData () b-SetLink (q-GetLink (); q-ListNode (); q=b-GetLink (); else b=q; q=q-GetLink (); p=p-GetLink (); void List:ChangeHead (ListNode* cur) head=cur;void List:ChangeTail (ListNode* cur) tail=cur;void List:Cha

21、ngeName(string c) Name=c;List *pSIZE=NULL;int i=0;void Menu() /菜单功函数 coutendl; coutt44*43t陈玮的集合运算器t34*44endl; cout_endl; coutttt请选择对集合的操作序号: endl; couttt1: 添加集合: endl; couttt2: 删除集合: endl; couttt3: 浏览集合: endl; couttt4: 修改集合: endl; couttt5: 集合A与B求并: endl; couttt6: 集合A与B求交: endl; couttt7: 集合A与B求差: end

22、l; couttt0:退出: endl; coutt endl; couttt输入0作为集合名则返回上级菜单 endl; couttt现有集合数: i 集合数上限为: SIZEendl; coutendl;void Add_List() /添加集合功能函数 int c=1,flag=1; string ch; if(i=SIZE) coutt集合数已到上限,若坚持输入此个数,请改宏定义SIZEendl; return ; coutt请输入集合名:ch; if(ch=0) coutt返回上级菜单!nendl; return ; for(int j=0;jGetName() coutt集合ch已存

23、在,请重新输入集合名:endl; goto REPEAT; pi=new List(ch); coutt请输入集合ch的元素,以0空格0结束:c; if(c!=0) if(flag=0)pi-Add(flag); flag=1; pi-Add(c); else if(c=0&flag!=0) flag=c; else break; /*while(c!=0)flag1=0&(c=0&flag=0) cinc; if(c!=0) pi-Add(c); */ i+; coutt添加成功endl;void Skim_List() /浏览集合功能函数 if(i=0) coutt不存在任何集合!endl

24、; return ; for(int j=0;jIsempty() coutt集合GetName()为空集!endl; else coutt集合GetName()元素有:PrintData(); void Del_List() /删除集合功能函数 if(i=0) coutt不存在任何集合!endl; return ; ListNode *p1=NULL,*cur=NULL; string ch,ch0; int k=-1; coutt请选择下面集合名,删除:endl; Skim_List(); coutt请输入集合名:ch; if(ch=0) coutt返回上级菜单!nendl; return ; for(int j=0;jGetName(); if(ch0=ch) k=j; if(k=-1) coutt集合ch不存在,请重新输入集合名:Delete(); pk-List(); pk=NULL; for(;ki;k+) pk=pk+1; i-; coutt删除成功endl; void Revise_Li

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1