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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计.docx

1、数据结构课程设计数据结构课程设计学校:江苏科技大学苏州理工学院专业:计算机科学与技术专业学号:姓名: 1、集合的并、交和差运算(一)设计题目【问题描述】编制一个能演示执行集合的并、交和差运算的程序。【基本要求】 (1) 集合的元素限定为小写字母字符 a.z 。(2) 演示程序以用户和计算机的对话方式执行。【实现提示】以链表表示集合。【选作内容】(1) 集合的元素判定和子集判定运算。(2) 求集合的补集。(3) 集合的混合运算表达式求值。(4) 集合的元素类型推广到其他类型 , 甚至任意类型。(二)需求分析 LinkList(); /建立只有头结点的空链表 LinkList(DataType a

2、,int n); /建立有n个元素的单链表 LinkList(); /析构函数 void PrintList(); /按序号输出各元素 void jiaoji(Node *A,Node *B); /交运算 void bingji(Node *A,Node *B); /并运算 void InsertSort(char r,int n) ; /直接插入排序(三)概要设计在做第一题集合运算时,我通过有序单链表实现集合的交运算,并运算,差运算。首先,我要对集合中的元素用有序单链表进行存储。我首先通过直接插入排序对数组进行排序,使数组升序排列(因为我使用尾插法建立有序链表)。在计算交集时,只需要查找单链

3、表A和单链表B中相同的元素并保留在单链表A中。由于用有序单链表表示集合,所以判断元素是否在B中不需要遍历表B,而是从上次搜索到的位置开始,若搜索过程中,遇到一个其值比该元素大的结点,便可以断定该元素不在该链表中,为此需设两指针p , q分别指向当前被比较的两个结点,会出现以下三种情况:1若p-dataq-data,说明还未找到,需在表B中继续查找。 2 若p-datadata,说明B中无此值,处理表A中的下一个结点。3 若p-data=q-data,说明找到了公共元素。同理,求并运算时,只需对单链表B中的每一个元素x,在单链表A中进行查找,若存在和x不相同的元素,则将该结点插入单链表A中。求差

4、运算时,只需对单链表B中的每个元素x,在单链表A中查找,若存在与x相同的结点,则将该结点从单链表A中删除。(四)详细设计#ifndef LinkList_H#define LinkList_Htemplatestruct Node DataType data; Node*next; ; templateclass LinkList public: LinkList(); LinkList(DataType a,int n); LinkList(); void PrintList(); Node* first;#endif #includeusing namespace std;#include

5、LinkList.htemplateLinkList:LinkList() first=new Node; first-next=NULL; templateLinkList:LinkList(DataType a,int n) Node*r,*s; first=new Node; r=first; for(int i=0;in;i+) s=new Node; s-data=ai; r-next=s; r=s; r-next=NULL; templateLinkList:LinkList() Node*q=NULL; while(first!=NULL) q=first; first=firs

6、t-next; delete q; template void LinkList:PrintList() Node *p=first-next; while(p!=NULL) coutdatanext; coutendl; template /要查找单链表A和单链表B中相同的元素并保留在单链表A中。void jiaoji(Node *A,Node *B) /交运算 Node *pre,*p,*q; pre=A;p=A-next;q=B-next; while(p!=NULL&q!=NULL) if(p-datadata) pre-next=p-next; delete p; p=pre-nex

7、t; else if(p-dataq-data) q=q-next; else p=p-next; q=q-next; pre=pre-next; template /对单链表B中的每个元素x,在单链表A中查找,若存在与x相同的结点,则将该结点从单链表A中删除。void chaji(Node *A,Node *B)/A-B Node *pre, *p, *q; pre=A;p=A-next; q=B-next; while(p!=NULL & q!=NULL) if(p-datadata) p=p-next; pre=pre-next; /始终保证p=pre-next; if(p-dataq-

8、data) q=q-next; if(p-data=q-data) pre-next=p-next; delete p; p=pre-next; q=q-next; template /对单链表B中的每一个元素x,在单链表A中进行查找,若存在和x不相同的元素,则将该结点插入单链表A中void bingji(Node *A,Node *B) Node *pre,*p,*q; Node *s=NULL; pre=A;p=A-next;q=B-next; while(p!=NULL&q!=NULL) if(p-dataq-data) s=new Node; s-data=q-data; s-next

9、=pre-next;/ p=pre-next; pre-next=s; pre=s; q=q-next; else if(p-datadata)/p=pre-next; p=p-next;pre=pre-next; if(p=NULL&q!=NULL) pre-next=q;p=q; else if(p-data=q-data) p=p-next; q=q-next; pre=pre-next; if(p=NULL&q!=NULL) pre-next=q;p=q; void InsertSort(char r,int n) for(int i=1;in;i+) rn=ri;/设置哨兵 for(

10、int j=i-1; rn=0; j-) rj+1=rj; rj+1=rn; #include #include #include using namespace std;#include LinkList.cppvoid main() cout注意,输入的字符串必须为小写字母,且不出现重复字母!endl; char r1100,r2100; cout请输入字符串:endl; cin.getline(r1,100); cout请输入字符串:endl; cin.getline(r2,100) int k1=strlen(r1); int k2=strlen(r2); InsertSort(r1,

11、k1+1); InsertSort(r2,k2+1); LinkListL1(r1,k1+1);/尾插法 LinkListL2(r2,k2+1); cout输出:endl; cout建立有序链表:;L1.PrintList(); cout建立有序链表:;L2.PrintList(); cout1.交集.endl; cout2.并集.endl; cout3.差集.endl; cout请选择:choice; if(choice0&choice4) switch(choice) case 1: cout交运算:endl; jiaoji(L1.first,L2.first); L1.PrintList

12、(); coutendl; break;case 2: cout并运算endl; bingji(L1.first,L2.first); L1.PrintList(); coutendl; break;case 3: cout差运算endl; chaji(L1.first,L2.first); L1.PrintList(); coutendl; break; 2、病人就医管理(一)设计题目【问题描述】病人到医院看病,排队看医生的情况,在病人排队过程中,主要发生两件事:(1) 病人到达诊室,将病历本交给护士,排到等待队列中候诊。(2) 护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。试为医

13、院编制按上述要求进行管理的模拟程序。【基本要求】程序采用菜单方式,其选项及功能说明如下:(1) 排队-输入病人的病历号,加入到病人排队队列中(2) 就诊-病人排队队列中最前面的病人就诊,并将其从队列中删除。(3) 查看排队-从队首到队尾列出所有的排队病人的病历号。(4)下班-退出运行。(二)需求分析 patient(); /无参构造函数 patient(char *num); /带参构造函数patient(const patient &per); /拷贝构造函数 patient(); /折构函数void display(); /显示病人病历 void input(); /输入病人病历(三)概要

14、设计注意点:在做第二题病人就医管理时,我采用的数据结构是队列 ,利用其先进先出的特性,病人取病历号时进队,就诊时出队。判断对空的条件是front=rear.(四)详细设计#include#includeusing namespace std;class patient /定义病人这一个类 /病历号public: char *number; patient(); /无参构造函数 patient(char *num); /带参构造函数 patient(const patient &per); /拷贝构造函数 patient(); /折构函数 void display(); /显示病人病历 void

15、 input(); /输入病人病;patient:patient() number=NULL; patient:patient(char *num) if(num) number=new charstrlen(num)+1; /避免浅拷贝,将病历号拷贝 strcpy(number,num); patient:patient(const patient &per) /拷贝构造函数 if(per.number) number=new charstrlen(per.number)+1; strcpy(number,per.number); patient:patient() /折构函数 if(num

16、ber) delete number; void patient:display() /输出病人病历号 cout病历号: numberendl; void patient:input() /输入病人病历号 char num10; coutnum ; if(number) delete number; number=new charstrlen(num)+1; strcpy(number,num);const int N=10;void Output(patient *a);/出队 void Input(patient *a);/入队int jiuzhen(patient *a); int ch

17、akanpaidui(patient *a); void end(patient *a);int front=0,rear=1,z=10;void Input(patient *a) afront.input(); front+; z-;cout还有(z)名排队等待名额endl;int jiuzhen(patient *a) if(rear=front) cout请arear-1.number号病人现在就诊。endl; rear+; z+;/有人就诊,增加一排队名额 cout还有(z)排队等待名额endl; Else cout现在没有病人救诊!endl;return 0;int chakanp

18、aidui(patient *a) if(rear=front+1) cout现在没有病人排队!endl; else cout正在排队中的病人:endl; for(int i=rear-1;ifront;i+) ai.display(); return 0;int end() if(rear=front+1)/队空 cout可以下班了!endl; return 0; else cout还有病人,不可以下班!endl; return 1; int main() patient aN; /定义病人数组 int choice; /读入选项 cout病人就医管理endl; cout你好,欢迎登陆病人管

19、理系统!endl; cout 1.排队 - 输入病人的病历号,加入到病人的排队队列中。endl; cout 2.就诊 - 病人排队队列中最前面的病人就诊,并将其从队列中删除。endl; cout 3.参看排队 - 从队首到队尾列出所有的排队病人的病历号。endl; cout 4.下班?endl; cout 5.结束调试。endl; coutendl; cout医院排队区仅限10人endl; do coutchoice; if(choice0&choice=5) switch(choice) case 1:Input(a);break; case 2:jiuzhen(a);break; case

20、 3:chakanpaidui(a);break; case 4:end(); break; else cout输入错误,请重新输入!endl; coutendlendl; while(choice!=5);return 0;3、校园导游咨询(一)设计题目【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。【基本要求】(1)设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询。(3)为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的

21、一条最短路径及长度。(二)需求分析Grahp(int evertexNumvertexNum,int vvertexNum);/初始化图的邻接矩阵int shortest_way(int s,int d);/求最短路径int BFS(int s,int d);/广度优先算法(三)概要设计 第三题校园导游咨询用到了图结构,这一题蛮有难度的,这一题我采用了邻接矩阵存储各顶点,在查找最小路径时,我使用了Dijkstra算法,辅助数组distn;元素distn表示当前所找到的从源点v到终点vi的最短路径长度。辅助数组pathn:元素pathi是一个串,表示当前所找到的从源点v到终点vi的最短路径。数组

22、sn:存放源点和已生成的终点,初始态只有一个源点v.我采用的基本思路是:1. 初始化数组dist,path和s;2. While(s中元素个数n)2.1 在distn中求最小值,其编号为k;2.2 输出distk和pathk;2.3 修改数组dist和path;2.4 将顶点k添加到数组s中;(四)详细设计#includeusing namespace std;const int vertexNum=10;const int MAX=10000;/表示大于所有边上权值的数int default_evertexNumvertexNum=0,100,150, MAX,100,400,MAX,MAX

23、,MAX,MAX, 100,0,MAX,MAX,MAX,MAX,MAX,MAX,MAX,400, 150,MAX,0,100,MAX,MAX,50,MAX,MAX,MAX, MAX,MAX,100,0,MAX,MAX,MAX,200,100,200, 100,MAX,MAX,MAX,0,250,MAX,MAX,MAX,MAX, 400,MAX,MAX,MAX,250,0,100,300,MAX,MAX, MAX,MAX,50,MAX,MAX,100,0,MAX,MAX,MAX, MAX,MAX,MAX,200,MAX,300,MAX,0,150,MAX, MAX,MAX,MAX,100,MAX

24、,MAX,MAX,150,0,150, MAX,400,MAX,200,MAX,MAX,MAX,MAX,150,0;/初始化邻接矩阵10*10int default_vvertexNum=0,1,2,3,4,5,6,7,8,9; /*定义景点结构体*/struct view_spot_nodechar namevertexNum;int codename;/代号view_spot_node operator=(view_spot_node &v)/重载等号运算符,形参是一个view_spot_node 结构体类型的引用 codename=v.codename; for(int i=0;iver

25、texNum;i+) namei=v.namei; return v;/*输入代号及景点名字*/view_spot_node default_vsnvertexNum=景点A,1, 景点B,2,景点C,3, 景点D,4,景点E,5,景点F,6,景点G,7,景点H,8, 景点I,9, 景点J,10; /*图结构*/class Grahppublic: Grahp(int evertexNumvertexNum,int vvertexNum=default_v);/定义边和结点(首地址) int shortest_way(int s,int d);/求最短路径 int store_vvertexNum;/存储结点 int distancevertexNum;/声明距离的数组private: int BFS(int s,int d);/广度优先算法 void store(int d); int edgevertexNumvertexNum;/存储边 int vertexvertexNum;/顶点数组 int visitedvertexNum;/将为访问的顶点的

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

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