



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、个人收集整理仅供参考学习计算机科学与技术学院课程设计成绩单课程名称:数据结构课程设计指导教师:袁嵩姓名涂智明性别男学号201113138011班级软件 1101综合成绩成绩等级程序运行情况能正确运行基本能正确运行能运行但结果不完善(占总成绩 20%)(20 分)(15 分)(10 分)程序功能地完善程度完善基本完善不完善(占总成绩 10%)(10 分)(8 分)( 5 分)程序结构地合理性(占总成绩 10%)合理基本合理不太合理(10 分)(8 分)(5 分)对问题地答辩情况概念正确有创新能正确回答所有问题基本能正确回答(占总成绩 40%)( 40 分)( 35 分)(30 分)部分问题回答概
2、念不清晰(20 分)学生地工作态度与工作态度认真能独立完成任务工作态度认真但独立性较差独立工作能力(10 分)(8 分)(占总成绩 10%)工作态度基本认真但缺乏独立性(5 分)设计报告地规范性(占总成绩 10%)符合规范基本符合规范规范性较差(10 分)(8 分)(5 分)优秀:90 分100 分良好: 80 分89 分中等:7079 分及格:6069 分不及格0 分59 分b5E2RGbCAP武汉科技大学计算机科学与技术学院制表1/18个人收集整理仅供参考学习计算机科学与技术学院课程设计报告课程名称: 数据结构专业:软件工程班级:11级1班学号: 201113138011姓名:涂智明指导老
3、师:袁嵩2/18个人收集整理仅供参考学习题目一通讯录一、问题描述1) 通过键盘建立通讯录,每条记录至少包括2 个数据项:姓名、电话号码;2) 对通讯录进行插入、删除、修改和查找;3)通过姓名查找,必须实现精确查找和模糊查找,例如输入“张” ,则显示第一个姓张地朋友,然后可以选择“下一个” ,鼓励思路创新,提供其他多种查找方式,例如拼音查找等;p1EanqFDPw4) 也可以根据电话号码或部分电话号码进行精确查找和模糊查找;5)自行定义数据结构,可以选择性地将顺序查找、折半查找、索引查找、树型查找、哈希表等灵活运用其中,完成多方式查找功能.DXDiTa9E3d二、解题思路将一个用户地信息定义为一
4、个结构体,使用链表存储用户信息. 每一个用户为一个节点.通讯录功能设置为新建通讯录,新增联系人,查找联系人,修改联系人,删除联系人,保存通讯录,打开已有通讯录 . RTCrpUDGiT保存通讯录将通讯录以文本文件存到本地硬盘,在启动程序后, 可选择打开已保存地通讯录 .三、算法描述四、程序设计typedef struct nodeint n;char name20;char tel20;char add20;char qq15;struct node * next;list;用于存储联系人信息void enterdata(list *p0);用于数据输入void show (list *hea
5、d);显示已输入地信息void save (list *head,FILE *fp);保存文件void load (list *&head);载入已存储地文件void search (list *head);搜索联系人void change (list *head);改变已有联系人信息void del (list *&head);删除已有联系人void create (list *&head);创建新通讯录void insert(list *&head);插入一个联系人信息程序源码:#include stdafx.h#include#include #include #include#incl
6、ude3/18个人收集整理仅供参考学习#define LEN sizeof(list)cout#tt5.删除联系人using namespace std;ttt6.增 加 联 系 人 tttypedef struct node#;cout#tt7.保存int n;tttt8.打开tttchar name20;#;char tel20;cout#tt9.清屏char add20;tttt0.退出tttchar qq15;#;struct node * next;cout#list;#void enterdata(list *p0);#endvoid show (list *head);l; xH
7、AQX74J0Xvoid save (list *head,FILE *fp);coutm;void change (list *head);switch(m)void del (list *&head);void create (list *&head);case1:void insert(list *&head);show(head);break;case2:create(head);int main(int argc, char* argv)break;case3:list *head=NULL;search(head);break;FILE *fp=NULL;case4:int m;/
8、功能代号吗change(head);break;case5:dodel(head);break;couttttt通 讯 录case6:endl;insert(head);break;cout 请选 择您 需 要 地功case 7: save(head,fp);能: endl;printf(=保 存成功 =n);break;cout#case8:#load(head);break;#;5PCzVcase9:D7HxAsystem(cls);break;cout#tt1.显示所有联系人信息 tt2.新建通讯录 tt#; jLBHrnAILgwhile(m!=0);cout#tt3.查找联系人ttt
9、name);printf(城市 : );gets(p0-add);printf(电话 : );gets(p0-tel);printf(QQ: );gets(p0-qq);printf(n);/ 显示列表void show (list *head)list *p; / 定义移动指针 int i;char *menu=姓名 , 地址 ,电话 , QQ;/,生日 , 备注 p=head;printf(-n);LDAYtRyKfEfor(i=0;i4;i+)printf(%-12s,menui);coutname);printf(%-12s,p-add);printf(%-12s,p-tel);pri
10、ntf(%-12s,p-qq);printf(n);p=p-next;elsecout 不好意思 , 列表为空n;coutname,p0-add,p0-tel,p0-qq); dvzfvkwMI1p0=p0-next;fclose(fp);/ 载入void load (list *&head)FILE *fp;char ch;/存储从文件中读取地字符char lujing100;list *p1,*p2;/,*p3;printf(输入打开通讯录得路径:n);printf(例如:新建文件夹通讯录 .txtn请输入 :);scanf(%s,lujing);fp=fopen(lujing,r);if
11、(fp=NULL)printf( 错误 : 打不开文件或文件不在 n);exit(0);ch=fgetc(fp);/判定通讯录是否5/18个人收集整理仅供参考学习为空printf(n不好意思 , 列表为if(ch=EOF)空n);printf(=通讯 录 空=n);p1=head;p2=p1=head;while(p1!=NULL)while(p1!=NULL)p2=p1;if(strstr(p1-name,check_namep1=p1-next;) /模糊查找 用地 strstr()函数free(p2);EmxvxOtOcohead=NULL;while(!feof(fp)printf(姓
12、名:%sp1=(list *)malloc(LEN);,p1-name);p1-next=NULL;printf(城市:%s,p1-add);fscanf(fp,%s%s %s %s,p1-nameprintf(电话:%s,p1-add,p1-tel,p1-qq);rqyn14ZNXI,p1-tel);if(head=NULL)printf(QQ:%s,p1-qq);head=p1;printf(n);p2=head;printf( 是否是本条记录?按 1确定本条记录 t按其他数字键继else续n);scanf(%d,&m);p2-next=p1;if(m=1)p2=p1;break;p2=p
13、1;fclose(fp);p1=p1-next;show(head);if(p1=NULL&j=0)printf(n通讯录打开成功 n);printf(n没有 %s 地通讯信息n,check_name);/ 查找void search (list *head)list *p1,*p2;/ 修改char check_name20;void change (list *head)int j=0,m;printf(请输入要查找地姓名list *p1,*p2;n);char change_name20;scanf(%s,check_name);FILE *fp=NULL;if(head=NULL)pr
14、intf( 请输 入 要修 改 地 姓 名n);6/18个人收集整理仅供参考学习scanf(%s,&change_name);p1=head; /通讯录不为空时,把getchar();头指针赋值给 p1if(head=NULL)while(p1&(i=strcmp(delname,p1-name)/*p1指向地不是所要找地printf(n不好意思 , 列表为结 点, 且p1 不 是最 后 一个 结点空 n);*/ SixE2yXPq5p1=head;p2=p1; /保存前驱结点地址while(p1!=NULLp1=p1-next;&strcmp(change_name,p1-name)!=0)
15、if(i=0)p2=p1;printf(删除人p1=p1-next;为:%sn,p1-name);if(p1=head)if(p1!=NULL&strcmp(change_name,p1-name)=0)head=p1-next;/若 p1 指向地是首结点,指enterdata(p1);第二个结点地地址给P1save(head,fp);elsep2-next=p1-next;/修else改指针域printf(n%s没有被找到n,change_name);head-n=head-n-1;/ 删除printf(刚刚删除地void del (list *&head)是:%sn,delname);li
16、st *p1,*p2;/定义临时指针free(p1);char delname20;/保存要删除save(head,fp);人地姓名FILE *fp=NULL;/文件指针else if(p1=NULL)int i;printf(n姓名为 %s 地通讯printf(请 输入 要 删 除人 地姓信息没有被找到! n,delname);名 :);scanf(%s,delname);/ 创建if(head=NULL)void create (list *&head)printf(n =通讯录为空list *p0,*p1,*p2;=n);int m;/作为判断是否继续新建地条件7/18个人收集整理仅供参
17、考学习FILE *fp=NULL;按 0 结束 );p0=(list *)malloc(LEN);scanf(%d,&m);p0-next=NULL;head=p0;if(m=0)printf(请输入信息建立通讯录:n);save(head,fp);getchar();enterdata(p0);p2=p0;/ 插入printf(是否继续按 1 输入,按 0void insert(list *&head)结束 );scanf(%d,&m);list *p,*q;while(m)p=head;while(p-next)getchar();p=p-next;/遍历 到最 后一p1=(list *)
18、malloc(LEN);个结点printf(新建: n);p1-next=NULL;q=(list *)malloc(LEN);p2-next=p1;q-next=NULL;enterdata(p1);getchar();enterdata(q);p2=p1;p-next=q;head-n = head-n+1;/表长head-n = head-n+1;*printf(=建立完成 - 注意保存* 6ewMyirQFL=n);printf(是否继续按 1 输入,五、测试结果8/18个人收集整理仅供参考学习9/18个人收集整理仅供参考学习10/18个人收集整理仅供参考学习11/18个人收集整理仅供
19、参考学习题目二便利店选址一、问题描述某小区决定在小区内部建一家便利店,现小区内部共有八栋楼,它们地地理坐标分别为:( 10, 20)( 30, 34)( 19, 25)( 38, 49.1)( 9, 38.1)( 2, 34)( 5, 8) kavU42VRUs( 29, 48).同时,其中地住户人数分别为:30, 45, 28, 8, 36, 16, 78, 56. 为了方便更多地住户购物,要求实现总体最优,请问便利店应该建立在哪里?y6v3ALoS89【提示】1)便利店无论选址何处,八栋楼地居民均可直接到达,即八栋楼与便利店均相邻,且距离为直线距离;2)八栋楼地居民人数为权重,应该方便大多
20、数人,实现总体最优.二、解题思路运用精确重心算法,求出小区地重心,将便利店建在重心处即可.三、算法描述djxdx j2yd2yjnn2Cjajj dj2aj j xd x jy d y jj1j1najj x j/ d j* j 1x dnajj/ d jj 112/18个人收集整理仅供参考学习najj y j/ dj*j 1y dnajj/ djj 11.确定便利店地址初始位置(xd(0),y d(0) ).2.计算出与( x(0),y(0))相应地距离权重C(0).ddT3.(0),y d(0))代入公式中,计算出便利店地址地改进位置(xd(1)(1)将( xd,y d) .4.(1),y
21、(1))相应地距离权重(1)计算出与( xddCT .(1)与 C(0)进行比较,若C(1) C(0),则返回步骤3,将( x(1),y(1))代入公5.将 CTTTTdd式中,计算出便利店地址第二次改进位置((2),y(2)(1)(0),说明初始位置xdd ). 若 CTCT(0) (0)( xd ,y d )便是最优解 . M2ub6vSTnP6. 如此反复迭代计算,直至(k+1)(k)(k)(k))这一最优解为止 .CTCT,求出( xd,y d四、程序设计本程序中定义了四个函数分别是choosePostion(), sum1() , sum2() , comp() ;0YujCfmUC
22、wsum1(),sum2() 分别计算 xd* , yd* ,choosePostion()计算 Cj,comp() 返回两数字差值地绝对值; eUts8ZQVRd#include#include#define M 10000doublexM=10,30,19,38,9,2,5,29,yM=20,34,25,49.1,38.1,34,8,48,rM=30,48,28,8,36,16,78,56,dM;sQsAEJkW5Tvoid choosePostion(int n,double m);void main()int i,n;double min;printf(输入楼地数量:);scanf(%
23、d,&n);while(n=0)printf(没有楼不能建超市!n);printf(请重新输入需要满足楼数:);scanf(%d,&n);printf(输入各楼地坐标(x,y ),住户 n);for(i=0;in;i+)printf(第%d个:坐标: ,i+1);13/18个人收集整理仅供参考学习scanf(%lf,%lf,&xi,&yi);printf(住户人数 :);scanf(%lf,&ri);printf(求最佳地址 );i=8;printf(请给出收敛地差值min:);scanf(%lf,&min);choosePostion(i,min);double sum1(int n,dou
24、ble aM,double bM)int i;double s=0,p=0;for(i=0;in;i+)s+=ai*bi;for(i=0;in;i+)p+=bi;return s/p;double sum2(int n,double aM,double bM)int i;double s=0,p=0;for(i=0;in;i+)s+=ai*bi/di;for(i=0;in;i+)p+=bi/di;return s/p;double comp(double a,double b)if(a0)return (-a-b);return (a-b);void choosePostion(int n,d
25、ouble m)int i=1,j;bool find=false;double sum,a1,b1,a2,b2;if(n=1)printf(对于一个楼,便利店最佳选址即楼所在地址:x=%lf,y=%lfn,x0,y0);GMsIasNXkA14/18个人收集整理仅供参考学习elsea1=sum1(n,x,r);b1=sum1(n,y,r);while(find=false)printf(a%d=%lf,b%d=%lfn,i,a1,i,b1);printf(*: n);for(j=0;jn;j+)dj=(sqrt)(xj-a1)*(xj-a1)+(yj-b1)*(yj-b1);TIrRGchY
26、zgprintf(d%d:%lft,j+1,dj);sum=0;for(j=0;jn;j+)sum+=dj*rj;printf(当前距离权重%lf.n,sum);a2=sum2(n,x,r);b2=sum2(n,y,r);if(comp(a1-a2,m)0)&(comp(b1-b2,m)0)find=true;a1=a2;b1=b2;i+;printf(a%d=%lf,b%d=%lfn,i,a1,i,b1);printf(所以 , 便利店地最佳选址为: x=%lf,y=%lfn,a2,b2);sum=0;for(j=0;jn;j+)sum+=dj*rj;五、测试结果15/18个人收集整理仅供参
27、考学习版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This articleincludessome parts,includingtext,pictures,and design. Copyright is personal ownership.7EqZcWLZNX用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途, 但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利. 除此以外,将本16/18个人收集整理仅供参考学习文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬 . lzq7IGf02EUsers may use the contents or services of thi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 签定朝鲜停战协议书模板
- 测绘业务分包协议书范本
- 燃气安全合同协议书模板
- 深圳农民房交易协议合同
- 活动承包合同协议书范本
- 汽柴油沥青销售合同范本
- 村委秸秆清运协议书范本
- 稠州银行资金托管协议书
- 第三方委托装修协议合同
- 江苏商标申请代理协议书
- 国家重点研发计划“公共安全风险防控与应急技术装备”2023年立项项目
- YS/T 320-2014锌精矿
- 09S304 卫生设备安装图集
- 酸雾抑制剂化学品安全技术说明书
- 重点监管的危险化学品名录(完整版)
- 解三角形专题 - (解析版)
- 高等教育心理学学习提纲整理
- 桩基施工安全检查表
- 水玻璃有机酯自硬砂工艺简介
- 2022年公司管理制度发布流程
- XXX医院管道护理工作总结
评论
0/150
提交评论