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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计报告.docx

1、数据结构课程设计报告 数 据 结 构课程设计报告学生学号: * 学生姓名: * 专业班级: * 指导教师: * 单位员工通讯录管理系1. 问题描述为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。2. 主要数据类型和函数建立员工信息管理系统用到链表的储存结构,通过单链表实现所有操作可定义如下的存储结构:typedef struct staff /*员工通讯信息的结构类型定义*/ char num; /*员工编号*/ char name8; /*员工姓名*/ ch

2、ar phone; /*办公室电话号码*/ char call; /*手机号码*/ struct staff *next;staff,*Linkliust;主要函数:LinkList Creat(),void Search(),void Delete(),void Insert(),void change().3. 算法设计A、首先先创建一个链表,定义一个结构体包含一个next指针和一个DataType型数据data,构造一个指针类型的函数LinkList Creat(LinkList&L),需要先弄一个头指针head并对其开辟一个空间再通过一个循环实现链表的储存功能。创建后要对其进行一系列操

3、作,查找、删除、插入、修改。B、查找操作:根据输入的需要查找的选项,再利用t利用一个循环体 while(p&p-data.num!=t) p=p-next;找到所需要查找的信息。C、删除操作:也是根据输入要删除的选项,先查找到要删除的信息位置while(p-next&p-next-data.num!=t) p=p-next; if(p-next) s=p-next; p-next=s-next; free(s); 通过指针的变换来实现删除。D、修改操作:先输入要修改的选项,然后选择要修改的项目进行修改。4、调试及测试结果1、 建立记录 2、查询记录 其他测试结果这里不一一列举(源代码见附录)停

4、车场管理(栈和队列的应用)1、 问题描述设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。2、 需求分析停车场管理系统,以栈模拟停车场,以队

5、列模拟车场外的便道。首先来的车辆要进入停车厂或者进入便道。当停车场车辆未满时直接将车停入停车场。当停车场车辆停满时,则此时进入的车辆应该进入便道。然后等待停车场中的车辆离去,离去一辆车则便道中的车辆进入停车场。栈以顺序存储结构实现,队列以链表结构实现3、 算法设计算法思路:模拟停车场管理,需要用一个栈来表示停车场,然后用一个队列用来表示车站停满车时把车停在停车场外的便道上。本实验要定义一个队列两个栈,其中一个栈可以辅助停车场中的车辆离开,即离开一辆车时,在此车前面的车依次进入辅助栈,离开后这些车辆再进入停车栈,然后判断队列中是否有车,如果有则将便道队列中的车辆移进停车厂。否则不进行操作。关于费

6、用的计算,出车站的时间减去进车站的时间得到的时间差再乘以每小时的停车费用就是这辆车本次停车所需要交的费用4、主要函数void chushihua(SqStack &S) S.base=S.top=S.stop;初始化void jinche(SqStack &S,LinkQueue &L)车进栈void chuche(SqStack &S,SqStack &q,LinkQueue &L)车出栈5、调试并运行进车 车已进满,再来的车将进入便道出车出车后,因为便道内有车,所以便道内的车开始进停车场。其他测试结果这里不一一列详细代码见附录哈夫曼编码/译码系统(树应用)1、问题分析利用哈夫曼编码进行通信

7、,可以压缩通信的数据量,提高传输效率,缩短信息的传输时间,还有一定的保密性。现在要求编写一程序模拟传输过程,实现在发送前将要发送的字符信息进行编码,然后进行发送,接收后将传来的数据进行译码,即将信息还原成发送前的字符信息。2、需求分析在本例中设置发送者和接受者两个功能,发送者的功能包括:输入待传送的字符信息;统计字符信息中出现的字符种类数和各字符出现的次数(频率);根据字符的种类数和各自出现的次数建立哈夫曼树;利用以上哈夫曼树求出各字符的哈夫曼编码;将字符信息转换成对应的编码信息进行传送。接受者的功能包括:接收发送者传送来的编码信息;利用上述哈夫曼树对编码信息进行翻译,即将编码信息还原成发送前

8、的字符信息。从以上分析可发现,在本例中的主要算法有三个:(1)哈夫曼树的建立;(2)哈夫曼编码的生成;(3)对编码信息的翻译。3、算法设计首先读入一组字符,然后统计这些字符中不同字符出现的次数,并当做其权值,然后根据不同字符及其权值建立哈弗曼树。建立哈弗曼树后即可得到这些不同字符的哈弗曼编码,然后即可根据这些哈弗曼编码对那组输入的一串字符进行哈弗曼编码。译码是根据一组编码翻译成一组字符的操作,其算法就是根据这一串编码来对哈弗曼树进行遍历,每遍历到一个叶子结点即输出一个字符,直至将编码操作完即可完成多编码的翻译操作。4、主要函数void tongji(char *d1,int *w,char *

9、d,int &n) 对个字符出现的频率进行统计void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n,char *d)构建哈夫曼树void bianma(HuffmanCode HC,char *d1,char *d,char *bc) 哈夫曼编码void yima(HuffmanTree HT,int n,char*bc) 有编码得到译码5、调试并运行输入一段字符后,尖括号中表示的是该字符的出现的频率,并得到哈夫曼编码,最后又编码得到译码教学计划编制问题(图的应用)1、 问题分析大学的每个专业都要制定教学计划。假设任何专

10、业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。2、 需求分析1.输入参数应包括:学期总数,一学期的学分上限,每门课的课程号(可以是固定占3位的字母数字串)、学分和直接先修课的课程号。2.应允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。3.若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定

11、的文件中。计划的表格格式可以自己设计。4.可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。3、算法分析对于有向图,我们采取邻接表作为数据结构。首先确定学期数和每学期的学分总数上限,不能一学期将很多课全部学完。然后根据输入的计划课程树和输入的拓扑排序所形成的课程先修关系建立拓扑图。在拓扑排序的过程之中,输入入度为零(即没有前趋)的顶点,同时将该顶点的直接后继的入度减1。(1)、查邻接表中入度为零的顶点,并进栈。(2)、当栈为空时,进行拓扑排序。(a)、退栈,输出栈顶元素V。(b)、在邻接表中查找Vj的直接后继Vk,将Vk的入度减一,并

12、令入度减至零的顶点进栈。表节点(弧结构);typedef struct ArcNode ArcNode;头结点;typedef structVNode, AdjListMAX_VERTEX_NUM;图结构;typedef structALGraph;操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 ;int LocateVex(ALGraph G,VertexType u)采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图);Status CreateGraph(ALGraph &G)输出图的邻接矩阵G ;void Display(ALGraph G)求顶点的入度

13、;void FindInDegree(ALGraph G,int indegree)顺序栈;typedef struct SqStackSqStack;构造一个空栈S;Status InitStack(SqStack *S)清空栈的操作;void ClearStack(SqStack *S)若栈S为空栈,则返回TRUE,否则返回FALSE ;Status StackEmpty(SqStack S)若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR ;Status Pop(SqStack *S,SElemType *e)插入元素e为新的栈顶元素;Status Push(S

14、qStack *S,SElemType e)求大学所有课程总学分;Status zxf(ALGraph G)程序的核心函数:Status TopologicalSort(ALGraph G)有向图G采用邻接表存储结构,若G无回路,则按用户选择的方案输出G的顶点的一个拓扑序列并返回OK, 否则返回ERROR;4、调试并运行运行结果:使学习负担尽量均匀:使课程尽量分布在前几个学期:药品销售统计系统(排序应用)1、问题分析在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125

15、,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。2、算法分析A、拿一个和后边的比较如果大,则后移,一趟结束后最大的放到最后边了,然后循环调用实现排序。B、快速排序:用两个指针low和high分别指向头和尾,首先以头元素为轴,如果high大于轴元素,high-,否则把high指针指向的元素赋给low,然后low+,如果low指向的元素小于轴low+,反之把l

16、ow指向的元素赋给high,依次递归调用实现快速排序。C、基数排序:基数排序是借助“分配”和“收集”两种操作对单逻辑关键字进行排序的一种内部排序方法。先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。D、销售额使用的是堆排序,堆排序首先要建立一个完全二叉树的堆,其标准符合为父节点始终比子节点大。然后依次输出顶结点,然后在建立一个符合标准的堆重复操作即可。3、 调试并运行测试数据为yaopin.txt文件,文件内容如下:A234 安乃近 0.32 100

17、32.5B123 阿莫西林 0.5 50 60.5C455 银翘片 0.43 20 60.3D345 金银花 0.12 30 50.4D432 诺氟沙星 0.64 80 23.5F872 罗红霉素 1.5 35 100.34J234 吗丁啉 0.58 63 96.6S342 青霉素 0.34 10 20.7运行界面如下药品信息的输出按药品编号排序(基数排序) 按单价排序(冒泡排序)按销售量排序(快速排序) 按销售额排序(堆排序)校园导游咨询(最短路径)1、问题分析设计一个校园导游程序,为来访的客人提供各种信息查询服务。要求:(1)设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各

18、景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询。(3)为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。2、算法分析设计校园导游咨询要提供一些信息,主要是构建一个图,采用邻接矩阵储存,然后找到两点间的最短路径。这里求最短路径采用迪杰斯特拉算法求最短路径。迪杰斯特算法是根据路径长度递增的顺序求解从顶点Vo到其他个顶点的最短路径。对于图G=(V,E),逐个将尚未求出最短路径的顶点集合加入到已经求出最短路径的重点集合中:void shortestpath_DIJ(int num)/迪杰斯特拉

19、算法最短路径 int v,w,i,t;/i、w和v为计数变量/t表示景点个数 int finalNUM; /标志数组、用来存放顶点的信息 int min;/记录权值、最终输出路径 for(v=0;vNUM;v+) finalv=FALSE; /假设从顶点num到顶点v没有最短路径 Dv=G.arcnumv.length;/将num到其余顶点的最短路径长度初始化为权值 for(w=0;wNUM;w+) pathvw=FALSE;/初始化从v到w的路径值 if(DvMAX) /存在路径 pathvnum=TURE; /存在标志置为一 pathvv=TURE; /自身到自身 Dnum=0;/初始化新

20、路径 finalnum=TURE; /初始化num顶点属于final集合 /开始主循环,每一次求得num到某个顶点的最短路径,并将其加入到final集合 for(i=0;iNUM;+i) / 其余G.vexnum-1个顶点 min=MAX; /当前所知离顶点num的最近距离 for(w=0;wNUM;+w) if(!finalw) /w顶点在v-s中 if(Dwmin) /w顶点离num顶点更近 v=w; min=Dw; finalv=TURE; /离num顶点更近的v加入到s集合 for(w=0;wNUM;+w) /更新当前最短路径极其距离 if(!finalw&(min+G.arcvw.l

21、ength)Dw)/不在s集合,并且比以前所找到的路径都短就更新当前路径 Dw=min+G.arcvw.length;/更新路径 for(t=0;tNUM;t+) pathwt=pathvt; pathww=TURE; 3、调试并运行 运行界面中工简介景点信息查询输入相关的景点编号即可利用迪杰斯特拉算法求出最短路径景点距离查询:课程设计心得经过三周的努力,课程设计终于完成了。因为是在假期后开学前进行课设,任务量也非常大,再加上上学期数据结构基础不是非常扎实,好多数据结构知识点意思模糊,所以这次的课设对我来说很吃力,一方面要复习学过的知识,一方面还要对程序经行优化,尽管如此,我并没有放弃,而是一

22、步步走过来。遇到问题不会,就翻阅书籍查询,在这次课设中也得到了老师和同学们的帮助。有些程序算法也借鉴网上的相关文档对自己的算法经行优化。这次课设虽然艰难,但是我从中学习到了很多,也认识到自己存在的很多问题:自己对算法优化不够好,而且代码练得还是太少,编程经验不足。所以在今后的学习中,在强化知识巩固的同时更要注重实践。在学习中,要熟记各种数据类型定义特点和基本运算,并把这些东西在实践中强化。我相信经过我的不懈努力,我的编程技巧一定会逐渐上升。附 录1、单位员工通讯录管理系统:#include #include #include #define NULL 0typedef struct staff

23、/员工通讯信息结构类型的定义 int num;/员工编号 char name8;/员工姓名 int phone; /手机号码 int call;/电话号码 struct staff *next; staff,*LinkList;/建立链表LinkList Creat()int i,n;staff *p;LinkList L;L=(LinkList)malloc(sizeof(staff);L-next=NULL;printf(请输入员工数:);scanf(%d,&n);printf(nnttt*新建通讯录*n); for(i=0;inum); printf(员工姓名:); scanf(%s,p

24、-name); printf(手机号码:); scanf(%d,&p-phone); printf(电话号码:); scanf(%d,&p-call); p-next=L-next; L-next=p; printf(ttt*输入成功!*n);return L;/查找void Search(staff *l) int m; staff *p; p=l-next; printf(nnttt*查询通讯录记录*n); printf(nttt请选择查询方式:n); printf(ttt*n); printf(ttt# 1-编号 #n); printf(ttt# 2-姓名 #n); printf(ttt

25、# 3-手机 #n); printf(ttt# 4-电话 #n); printf(ttt*n); printf(ttt请选择:); scanf(%d,&m); while(m!=1&m!=2&m!=3&m!=4) printf(t输入错误!请重新选择:); scanf(%d,&m); ; if(m=1)/按编号查询 int t; printf(n请输入想查询的编号:); scanf(%d,&t); while(p&(p-num)!=t) p=p-next; if(p=NULL) printf(t通讯录中没有此人!n); else printf(nttt*员工信息*n); printf(员工编号

26、: %dn,p-num); printf(员工姓名: %sn,p-name); printf(手机电话: %dn,p-phone); printf(电话号码: %dn,p-call); ;if(m=2)/按姓名查询 char s8; printf(n请输入想查询的姓名:); scanf(%s,s); while(strcmp(p-name,s)!=0&(p!=0) p=p-next; if(strcmp(p-name,s)=0) printf(nttt*员工信息*n); printf(员工编号: %dn,p-num); printf(员工姓名: %sn,p-name); printf(手机号码

27、: %dn,p-phone); printf(电话号码: %dn,p-call); else printf(t通讯录中没有此人!n); ;if(m=3)/按手机号码查询 int t; printf(n请输入想查询的手机号码:); scanf(%d,&t); while(p&(p-phone)!=t) p=p-next; if(p!=0) printf(nttt*员工信息*n); printf(员工编号: %dn,p-num); printf(员工姓名: %sn,p-name); printf(手机号码: %dn,p-phone); printf(电话号码: %dn,p-call); else printf(t通讯录中没有此人!n); ;if(m=4)/按电话号码查询 int t; printf(n请输入想查询的电话号码:); scanf(t%d,&t); while(p&p-call!=t) p=p-next; if(p!=0) printf(nttt*员工信息*n); printf(员工编号: %dn,p-num); printf(员工姓名: %sn,p-name); printf(手机号码: %dn,p-phone); printf(电话号码: %dn,p-call); else printf(t通

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

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