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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计.docx

1、数据结构课程设计 计算机科学与技术学院 课 程 设 计 报 告课程名称 数据结构课程设计专 业: 软 件 工 程 班 级: 11 级 3 班 学 号: 201113138103 姓 名: 李 青 龙 指导老师: 袁 嵩 计算机科学与技术学院课程设计成绩单课程名称:数据结构课程设计 指导教师: 姓名李青龙性别男学号201113138103班级软件1103综合成绩成绩等级程序运行情况(占总成绩20%)能正确运行 基本能正确运行 能运行但结果不完善(20分) (15分) (10分)程序功能的完善程度(占总成绩10%)完善 基本完善 不完善(10分) (8分) (5分)程序结构的合理性(占总成绩10%

2、)合理 基本合理 不太合理(10分) (8分) (5分)对问题的答辩情况(占总成绩40%)概念正确有创新 能正确回答所有问题 基本能正确回答(40分) (35分) (30分)部分问题回答概念不清晰(20分)学生的工作态度与独立工作能力(占总成绩10%)工作态度认真能独立完成任务 工作态度认真但独立性较差(10分) (8分)工作态度基本认真但缺乏独立性(5分)设计报告的规范性(占总成绩10%)符合规范 基本符合规范 规范性较差(10分) (8分) (5分)优秀:90分100分 良好:80分89分 中等:7079分 及格:6069分 不及格0分59分 武汉科技大学计算机科学与技术学院制表题目一 通

3、讯录问题描述1) 通过键盘建立通讯录,每条记录至少包括2个数据项:姓名、电话号码;2) 对通讯录进行插入、删除、修改和查找;3) 通过姓名查找,必须实现精确查找和模糊查找,例如输入“张”,则显示第一个姓张的朋友,然后可以选择“下一个”,鼓励思路创新,提供其他多种查找方式,例如拼音查找等;4) 也可以根据电话号码或部分电话号码进行精确查找和模糊查找;5) 自行定义数据结构,可以选择性的将顺序查找、折半查找、索引查找、树型查找、哈希表等灵活运用其中,完成多方式查找功能。解题思路由于题目要求通讯录能增、删、改、查,所以选择用线性链表这一存储结构比较好操作。又由于存放的数据至少包含两个数据,因此节点类

4、型应该为结构体。题目要求实现精确查找和模糊查找,可以利用string类中的strcmp()函数实现。查找类型为顺序查找。算法描述程序设计/ data数据类型定义struct ElemType string name; string num;/ 线性表的单链表存储结构struct LNode ElemType data; LNode *next;typedef LNode *LinkList; / 另一种定义LinkList的方法void Build(LinkList L, ElemType e) /新建联系人并插入链表 int i; cout请输入姓名:e.name; cout*-*-*-*-

5、*-*endl; cout请输入电话号码:e.num; cout*-*-*-*-*-*endl; i=Locate(L,e.name,e.num); if(i!=0) int j=ListInsert(L,i,e); /调用ListInsert()函数 printf(新建成功!请选择操作项:n); cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; else cout请选择操作项:endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

6、*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; void Delete (LinkList L) /删除联系人 string name; cout请输入要删除的联系人姓名:name; cout*-*-*-*-*-*endl; int i=GetId(L,name); if(i!=0) int x=ListDelete(L,i) ; /调用ListDelete()函数 cout删除成功!请选择操作项:endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-

7、*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; else cout对不起,输入的联系人不存在!endl; /输入联系人不存在删除失败 printf(请选择操作项:n); cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; int Modify(LinkList L) /修改联系人信息 string name; cout请输入要修改的联系人姓名:name; cout*-*-*-*-*-*endl; int i=GetId(L,name)

8、; /调用GetId()函数,在链表中找到要修改的位置 while(i=0) cout输入联系人不存在,是否继续?endlY:YES N:NOa; cout*-*-*-*-*-*endl; while(a!=Y&a!=N) cout无效选项,请从新输入:a; cout*-*-*-*-*-*endl; if(a=Y) cout请输入要修改的联系人姓名:name; cout*-*-*-*-*-*endl; i=GetId(L,name); else if(a=N) cout未修改!endl; printf(请选择操作项:n); cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

9、-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; return 0; int j=Alter(L,i,name); /调用Alter()函数,在链表中修改联系人信息 printf(请选择操作项:n); cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*next&jnext; j+; if(!p-next|ji-1) / 更改位置不合理 return ERROR; cout请输入更改后的联系人信息:end

10、l; cout姓名:name; cout*-*-*-*-*-*endl; cout电话号码:num; cout*-*-*-*-*-*endl; int k=Exist(L,name); if(name=Name) k=1; while(k=0) cout更改后姓名与原信息有同名项!是否继续?endlY:YES N:NOa; cout*-*-*-*-*-*endl; while(a!=Y&a!=N) cout无效选项,请从新输入:a; if(a=Y) cout请从新输入更改后的联系人信息:endl; cout姓名:name; cout*-*-*-*-*-*endl; cout电话号码:num;

11、cout*-*-*-*-*-*endl; k=Exist(L,name); else if(a=N) cout未修改!next=p-next-next; int s=1; string a,b; if(q-next) s=1; a=q-next-data.name; b=name; int l=strcmp(a.c_str(),b.c_str(); if(lnext; while(lnext) a=q-next-data.name; b=name; l=strcmp(a.c_str(),b.c_str(); if(lnext; int m=ListInsert(L,s,e); cout修改成功

12、!endl; return 1;void Search(LinkList L) /用关键字查询联系人,包括模糊查找和精确查找 string keyword; cout请输入检索关键字:keyword; cout*-*-*-*-*-*next) int m=p-next-data .name.length(); int k=m-n+1; int pos=0; while(k0) int i=p-next-data pare(pos, n,keyword); if(i=0) Nar=p-next-data .name; Nur=p-next-data .num; +r; break; k-; po

13、s+; p=p-next ; if(r=0) cout查询结果为空endl; else coutendl查询结果如下:endlendl; while(j=r) coutj. Naj-1endl; j+; /精确查询 coutendl是否继续精确查询?endlY:YES N:NOa; cout*-*-*-*-*-*endl; while(a!=Y&a!=N) cout无效选项,请从新输入:a; cout*-*-*-*-*-*endl; if(a=Y) char b100; int i; cout请输入精确查找联系人序号:b; cout*-*-*-*-*-*endl; char temp100;

14、itoa(r,temp,10); int n=strcmp(b,temp); if(n=0) n=0; while(Charge(b)|b0=0|n) cout无效选项!请从新输入:b; cout*-*-*-*-*-*endl; i = atoi(b); coutendlendl姓名:Nai-1t电话号码:Nui-1endlendl; cout查询完成!请选择操作项:endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*next) cout通讯录信息为空!end

15、l; else coutendl以下是通讯录信息:endlnext) cout姓名:next-data.namet电话号码:next-data.numendlnext; printf(请选择操作项:n); cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl;/主函数void main() ElemType e; LinkList L; string n; int i=InitList(L); LinkList q=L; cout通讯录已启动,请选择操作项:end

16、l; cout1.新建 2.删除 3.修改 4.查询 5.浏览 6.退出endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*n; cout*-*-*-*-*-*n; cout*-*-*-*-*-*n; cout*-*-*-*-*-*n; cout*-*-*-*-*-*n; cout*-*-*-*-*-*n; cout*-*-*-*-*-*endl; else cout无效选项!请从新输入:n; cout*-*-*-*-*-*endl; cout*-*-*-*-

17、*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*endl; cout通讯录已退出!endl;测试结果程序开始运行,提示用户输入对应序号选择操作项选择操作项1,新建联系人选择操作项2,删除联系人,若输入联系人不存在,删除失败若输入联系人存在,删除成功选择操作项3,修改联系人信息,若输入联系人不存在,修改失败若修改后的联系人与原有信息有同名项,修改失败修改成功实例选择操作项4,进入查询查询分为模糊查询与精确查询选择操作项5,浏览当前通讯录信息选择操作项6,退出程序总结心得体会 做完该通讯录的课程

18、设计之后自己对汉字的编码有了更加深入的了解,对数据结构的操作,选取有了整体的认识及提高。在做通讯录时遇到了些棘手的问题,但通过自己的不懈努力终于将问题解决,使自己独立解决问题的能力有所提高。这次课程设计可以说是对自己很好的锻炼。本程序在查询部分并不完善,查询方法还有待优化,查询方式过于单一,数据较少还可以,数据多了就反应太慢。题目二【便利店选址】问题描述某小区决定在小区内部建一家便利店,现小区内部共有八栋楼,它们的地理坐标分别为:(10,20) (30,34) (19,25) (38,49.1) (9,38.1) (2,34) (5,8) (29,48)。同时,其中的住户人数分别为:30, 4

19、5, 28, 8, 36, 16, 78, 56。为了方便更多的住户购物,要求实现总体最优,请问便利店应该建立在哪里?解题思路 本题目通过建立数学模型后可以转换为二元函数求最值问题,其中f(x,y)表示为距离*权重的累加,只要找到点使得f(x)最小则该点时最优解!算法描述 本题采用PSO粒子群算法找到最优解 PSO算法描述如下: a). 初始化一群微粒(群体规模为m),包括随机的位置和速度;b). 评价每个微粒的适应度;c). 对每个微粒,将它的适应值和它经历过的最好位置pbest的作比较,如果较好,则将其作为当前的最好位置pbest;d). 对每个微粒,将它的适应值和全局所经历最好位置gbe

20、st的作比较,如果较好,则重新设置gbest的索引号;e). 根据方程(1)变化微粒的速度和位置;f). 如未达到结束条件(通常为足够好的适应值或达到一个预设最大代数Gmax),回到b)。程序设计#include #include #include using namespace std;#define size 30typedef struct double x; double y;point;point loc_house8=10,20,30,34,19,25,38,49.1,9,38.1,2,34,5,8,29,48;double weight8=30,45,28,8,36,16,78,

21、56;/以下是pso所需变量的定义int iteration=100;/迭代次数/int size=100; /种群数量double w;double w_max=1.7,w_min=-1.7;double best_in_history=100000;/全局历史最优值double max_v=0.3; /最大速度限制double best_fitness=100000; /最优适应值double pop_matrixsize8;double c1=2;double c2=2;double x_max=100;double y_max=100;double x_min=0;double y_min=0;double gbest_x;/全局最优值Xdouble gbest_y;/全局最优值yvoid init();void cal_fitness();void update_pos();void update_v();void find_best_fit();double dist(point p1,point p2);int main() /第一步进行初始化 init(); time_t t; srand(unsigned(time(&t); /进入迭代循环 for(int i=0;iiteration;i+) w=w_max-(w_max-w_min)*(i

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2