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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

级数据结构课程设计报告Word下载.docx

1、班 级: 11级 1 班 学 号: 1 姓 名: 涂智明 指导老师: 袁嵩 题目一 通讯录一、问题描述1) 通过键盘建立通讯录,每条记录至少包括2个数据项:姓名、电话号码;2) 对通讯录进行插入、删除、修改和查找;3) 通过姓名查找,必须实现精确查找和模糊查找,例如输入“张”,则显示第一个姓张的朋友,然后可以选择“下一个”,鼓励思路创新,提供其他多种查找方式,例如拼音查找等;4) 也可以根据电话号码或部分电话号码进行精确查找和模糊查找;5) 自行定义数据结构,可以选择性的将顺序查找、折半查找、索引查找、树型查找、哈希表等灵活运用其中,完成多方式查找功能。二、解题思路 将一个用户的信息定义为一个

2、结构体,使用链表存储用户信息。每一个用户为一个节点。 通讯录功能设置为新建通讯录,新增联系人,查找联系人,修改联系人,删除联系人,保存通讯录,打开已有通讯录。 保存通讯录将通讯录以文本文件存到本地硬盘,在启动程序后,可选择打开已保存的通讯录。三、算法描述四、程序设计typedef struct node int n; char name20; char tel20; char add20; char qq15; struct node * next; list;用于存储联系人信息 void enterdata(list *p0);用于数据输入void show (list *head);显示已

3、输入的信息void save (list *head,FILE *fp);保存文件void load (list *&head);载入已存储的文件void search (list *head);搜索联系人void change (list *head);改变已有联系人信息void del (list *&删除已有联系人void create (list *&创建新通讯录void insert(list *&插入一个联系人信息程序源码:#include stdafx.h#include #includemalloc.hstdlib.hstring#define LEN sizeof(list)

4、 using namespace std; int n; char name20; char tel20; char add20; char qq15; struct node * next;void enterdata(list *p0);int main(int argc, char* argv) list *head=NULL; FILE *fp=NULL; int m;/功能代号吗 do coutm; switch(m) case 1: show(head);break; case 2: create(head); break; case 3: search(head); case 4

5、: change(head); case 5: del(head); case 6: insert(head); case 7: save(head,fp); printf(=保存成功=n); case 8: load(head); case 9: system(cls while(m!=0); return 0;/数据输入void enterdata(list *p0) printf(名字: gets(p0-name);城市: gets(p0-add);电话:tel);QQ:qq);n/显示列表void show (list *head) list *p; /定义移动指针 int i; ch

6、ar *menu=姓名,地址电话, QQ;/,生日备注 p=head;-n for(i=0;i4;i+)%-12s,menui); cout printf( p=p-next; else不好意思,列表为空n/保存void save (list *head,FILE *fp) list *p0;/定义移动指针 p0=head; fp=fopen(通讯录.txtwb+ while(p0! fprintf(fp,%s %s %s %s ,p0-name,p0-add,p0-tel,p0- p0=p0- fclose(fp);/载入head) FILE *fp; char ch;/存储从文件中读取的字

7、符 char lujing100; list *p1,*p2;/,*p3;输入打开通讯录得路径:例如:c:新建文件夹通讯录.txtn请输入: scanf(%s,lujing); fp=fopen(lujing,r if(fp=NULL)错误:打不开文件或文件不在n exit(0); ch=fgetc(fp);/判定通讯录是否为空 if(ch=EOF)=通讯录空=n p2=p1=head; while(p1! p2=p1; p1=p1- free(p2); head=NULL; while(!feof(fp) p1=(list *)malloc(LEN); p1-next=NULL; fscan

8、f(fp,%s %s %s %s,p1-name,p1-add,p1-tel,p1- if(head=NULL) head=p1; p2=head; else p2-next=p1;n通讯录打开成功n/查找void search (list *head) char check_name20; int j=0,m;请输入要查找的姓名n,check_name);n不好意思,列表为空n p1=head;=NULL) if(strstr(p1-name,check_name) /模糊查找 用的strstr()函数 姓名: %s 城市: 电话: QQ :是否是本条记录?按1确定本条记录t按其他数字键继续

9、n scanf(%d,&m); if(m=1) break; if(p1=NULL&j=0)n没有%s的通讯信息n/修改void change (list *head) char change_name20;请输入要修改的姓名nchange_name); getchar();=NULL &strcmp(change_name,p1-name)!=0) if(p1! strcmp(change_name,p1-name)=0) enterdata(p1); save(head,fp); n%s没有被找到n,change_name);/删除/定义临时指针 char delname20;/保存要删除

10、人的姓名/文件指针请输入要删除人的姓名:,delname);n =通讯录为空=n /通讯录不为空时,把头指针赋值给p1 while(p1&(i=strcmp(delname,p1-name)/*p1指向的不是所要找的结点,且p1不是最后一个结点*/ /保存前驱结点地址 if(i=0) 删除人为:%sn if(p1=head) head=p1- /若p1指向的是首结点,指第二个结点的地址给P1 else p2-next=p1-/修改指针域 head-n=head-n-1; 刚刚删除的是: free(p1); else if(p1=NULL)n姓名为%s的通讯信息没有被找到!/创建 list *p

11、0,*p1,*p2;/作为判断是否继续新建的条件 p0=(list *)malloc(LEN); p0- head=p0;请输入信息建立通讯录: enterdata(p0); p2=p0;是否继续按1输入,按0结束 while(m) getchar(); p1=(list *)malloc(LEN); p1- n = head-n+1;/表长*是否继续按1输入,按0结束 if(m=0)/插入 list *p,*q; while(p-next) p=p-/遍历到最后一个结点新建: q=(list *)malloc(LEN); q- enterdata(q); p-next=q; head-=建立

12、完成-注意保存=n五、测试结果题目二 便利店选址某小区决定在小区内部建一家便利店,现小区内部共有八栋楼,它们的地理坐标分别为:(10,20) (30,34) (19,25) (38,49.1) (9,38.1) (2,34) (5,8) (29,48)。同时,其中的住户人数分别为:30, 45, 28, 8, 36, 16, 78, 56。为了方便更多的住户购物,要求实现总体最优,请问便利店应该建立在哪里?【提示】1)便利店无论选址何处,八栋楼的居民均可直接到达,即八栋楼与便利店均相邻,且距离为直线距离;2)八栋楼的居民人数为权重,应该方便大多数人,实现总体最优。 运用精确重心算法,求出小区的

13、重心,将便利店建在重心处即可。1. 确定便利店地址初始位置(xd(0),yd(0)。2. 计算出与(xd(0),yd(0)相应的距离权重CT(0)。3. 将(xd(0),yd(0)代入公式中,计算出便利店地址的改进位置(xd(1),yd(1)。4. 计算出与(xd(1),yd(1)相应的距离权重CT(1)。5. 将CT(1)与CT(0)进行比较,若CT(1)CT(0),则返回步骤3,将(xd(1),yd(1)代入公式中,计算出便利店地址第二次改进位置(xd(2),yd(2)。若CT(1)CT(0),说明初始位置(xd(0),yd(0)便是最优解。6. 如此反复迭代计算,直至CT(k+1)CT(

14、k),求出(xd(k),yd(k)这一最优解为止。本程序中定义了四个函数分别是choosePostion(),sum1(),sum2(),comp();sum1(),sum2()分别计算,choosePostion()计算,comp()返回两数字差值的绝对值;math.h#define M 10000double xM=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;void choosePostion(int n,double m);void main() int i,n; dou

15、ble min;输入楼的数量:n); while(n=0)没有楼不能建超市!请重新输入需要满足楼数:输入各楼的坐标(x,y),住户nn;i+)第%d个:坐标:,i+1);%lf,%lfxi,&yi);住户人数:%lfri);求最佳地址 i=8;请给出收敛的差值min: scanf(min); choosePostion(i,min);double sum1(int n,double aM,double bM) double s=0,p=0; s+=ai*bi; p+=bi; return s/p;double sum2(int n,double aM,double bM) s+=ai*bi/d

16、i; p+=bi/di;double comp(double a,double b) if(a0) return (-a-b); return (a-b);void choosePostion(int n,double m) int i=1,j; bool find=false; double sum,a1,b1,a2,b2; if(n=1)对于一个楼,便利店最佳选址即楼所在地址: x=%lf,y=%lfn,x0,y0); else a1=sum1(n,x,r); b1=sum1(n,y,r); while(find=false)a%d=%lf,b%d=%lfn,i,a1,i,b1);*: n for(j=0;jj+) dj=(sqrt)(xj-a1)*(xj-a1)+(yj-b1)*(yj-b1); printf(d%d:%lft,j+1,dj); sum=0; sum+=dj*rj;当前距离权重%lf.n,sum); a2=sum2(n,x,r); b2=sum2(n,y,r); if(

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

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