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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验题参考答案Word文档格式.docx

1、for(i=0;iLIST_INIT_SIZE;i+)L.elemi=1; /给每个洞作标记为1,表示狐狸未进之洞L.elemLIST_INIT_SIZE-1=L.elem0=0;/首先进入第一个洞,标记进过的洞为0。for(i=2;=1000;current=(current+i)%LIST_INIT_SIZE;/实现顺序表的循环引用L.elemi=0; /标记进过的洞为0/第二次隔个洞找,第三次隔个洞找,以后如此类推,经过一千次printf(兔子可能藏在如下的洞中:if(L.elemi=1)printf(“第%d个洞n”,i+1);/输出未进过的洞号/end【C源程序】#includest

2、dlib.hOK1OVERFLOW-2status;ElemType; /*线性表存储空间的初始分配量*/ /*存储空间基址当前长度 /*当前分配的存储容量(以sizeof(ElemType)为单位)*/*L)/*构造一个线性表L(*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);if(!(*L).elem)/*存储分配失败(*L).length=0; /*空表长度为0(*L).listsize=LIST_INIT_SIZE; /*初始存储容量/*InitList_Sq/*构造狐狸逮兔子函数i,current=0; /*定义一

3、个当前洞口号的记数器,初始位置为第一个洞口*/(*L).elemi=1; /*给每个洞作标记为1,表示狐狸未进之洞(*L).elemLIST_INIT_SIZE-1=0;(*L).elem0=0; /*第一次进入第一个洞,标记进过的洞为0/*实现顺序表的循环引用(*L).elemcurrent=0;标记进过的洞为0/*第二次隔个洞找,第三次隔个洞找,以后如此类推,经过一千次n兔子可能藏在如下的洞中:);if(*L).elemi=1)n此洞是第%d号洞,i+1);/*输出未进过的洞号voidmain()SqList*L;InitList_Sq(L);Rabbit(L);getch();【测试数据

4、】最后的输出结果为:2479【说明】本算法思路比较简单,采用了顺序表表示围着山顶的10个洞,首先对所有洞设置标志为1,然后通过1000次循环,对每次所进之洞修改标志为0,最后输出标志为1的洞。2银行客户某银行有一个客户办理业务站,在单位时间内随机地有客户到达,设每位客户的业务办理时间是某个范围内的随机值。设只有一个窗口,一位业务人员,要求程序模拟统计在设定时间内,业务人员的总空闲时间和客户的平均等待时间。假定模拟数据已按客户到达的先后顺序依次存于某个正文数据文件中。对应每位客户有两个数据,到达时间和需要办理业务的时间。复习概念:与栈相对应,队列是一种先进先出的线性表。它只允许在表的一端进行插入

5、,而在另一端进行删除元素。允许插入的一端称队尾,允许删除的一端称队头。插入与删除分别称为入队与出队。队列示意图见图3-2:出队a1a2an-1an进队队头 队尾structarrive;treat;/客户的信息结构QNODE;nodeQNODEdata;Structnode*next;/队列中的元素信息LNODELNODE*front,*rear;/队头指针和队尾指针设置统计初值;设置当前时钟时间为0;打开数据文件,准备读;读入第一位客户信息于暂存变量中;do/约定每轮循环,处理完一位客户if(等待队列为空,并且还有客户)/等待队列为空时累计业务员总等待时间;时钟推进到暂存变量中的客户的到达时

6、间;暂存变量中的客户信息进队;读取下一位客户信息于暂存变量;累计客户人数;从等待队列出队一位客户;将该客户的等待时间累计到客户的总等待时间;设定当前客户的业务办理结束时间;while(下一位客户的到达时间在当前客户处理结束之前)时钟推进到当前客户办理结束时间;while(还有未处理的客户);计算统计结果,并输出;#includedata=e;next=NULL;if(*hpt=NULL)*tpt=*hpt=p; else*tpt=(*tpt)-next=p;DeQueue(LNODE*cp)/*链接队列出队*/*p=*hpt;1;/*队空*/ *cp=(*hpt)-*hpt=(*hpt)-ne

7、xt;*tpt=NULL;free(p);0;dwait=0,clock=0,wait=0,count=0,have=0,finish; printf(nenterfilename:); scanf(%s,Fname);/*输入装客户模拟数据的文件的文件名*/ if(fp=fopen(Fname,r)=NULL)/*打开数据文件*/cannotopenreturn; front=NULL;rear=NULL;have=fscanf(fp,%d%s,&temp.arrive,&temp.treat); do/*约定每轮循环,处理一位客户*/ if(front=NULLhave=2)/*等待队列为

8、空,但还有客户*/ dwait+=temp.arrive-clock;/*累计业务员总等待时间*/ clock=temp.arrive;/*时钟推进到暂存变量中的客户的到达时间*/ EnQueue(&front,&rear,temp);暂存变量中的客户信息进队*/ have=fscanf(fp,%d%d count+; /*累计客户人数*/ DeQueue(&rear,&curr);/*出队一位客户信息*/ wait+=clock-curr.arrive;/*累计到客户的总等待时间*/ finish=clock+curr.treat;/*设定业务办理结束时间; while(have=2temp

9、.arrive=finish)/*下一位客户的到达时间在当前客户处理结束之前*/ clock=finish;时钟推进到当前客户办理结束时间*/while(have=2|front!=NULL);结果:业务员等待时间%dn客户平均等待时间%fn,dwait,(double)wait/count);模拟总时间:%d,n客户人数:%d,n总等待时间:%dn,clock,count,wait);/*main_end*/ 设数据装在一个数据文件data.dat中,内容为:6138 显示结果为:data.dat enter file name:业务员等待时间10客户平均等待时间25.50000072,客户

10、人数:2,总等待时间:51在计算程序中,程序按模拟环境中的事件出同顺序逐一处理事件:当一个事件结束时,下一个事件隔一段时间才发生,则程序逻辑的模拟时钟立即推进到下一事件的发生时间;如一个事件还未处理结束之前,另有其他事件等待处理,则这些事件就应依次排队等候处理。3 二叉树的的应用:设计一个表示家谱的二叉树要求:采用一棵二叉树表示一逐步形成家谱关系,对于给定的父亲显示所有的儿子。由于家谱为树形,但不是一棵二叉树,所以在存储时要转换成二叉树的形式。规定:一个父亲结点的左子树表示母亲结点,母亲结点的右子树表示他们的所有儿子,例如,图1是一个用二叉树表示的家谱图,与之对应的传统树形图家谱图如图2所示。

11、这样就将家谱树转换成二叉树了,而二叉树的操作是容易实现的。 图2 一个家谱树图1 二叉树表示的家谱图源程序#include #define MaxWidth 40#define MaxSize 30typedef struct treenode char name10; struct treenode *left,*right; *BTree; BTree findfather(BTree p,char xm) BTree bt; if(p=NULL) return(NULL); else if(strcmp(p-name,xm)=0) return(p); bt=findfather(p-l

12、eft,xm); if(bt!=NULL) return(bt); else return(findfather(p-right,xm);BTree creatree() int n,m,i,contin=1,first=1; char xm10; BTree btree,s,t,p;n建立一个家谱二叉树(以空格结尾):n while(contin) if(first=1) btree=(BTree)malloc(sizeof(struct treenode);t姓名: gets(btree-name); btree-right=NULL; s=(BTree)malloc(sizeof(str

13、uct treenode);t妻子: gets(s- s-left=s-left=s; first=0;t父亲: gets(xm); if(strcmp(xm, )=0) contin=0; p=findfather(btree,xm); if(p!=NULL) p=p-left; if(p=NULL) /*没有妻子*/ printf(t没有儿子(因为没有妻子)n while(p-right!=NULL) p=p-right; s=(BTree)malloc(sizeof(struct treenode); s- p-right=s;t儿子: gets(s-t儿妻: gets(xm); if(

14、strcmp(xm,)!=0) t=(BTree)malloc(sizeof(struct treenode); strcpy(t-name,xm); t-left=t-left=t; else s-left=NULL; else printf(不存在这样的父结点! return(btree);void disptree(BTree BT) BTree stackMaxSize,p; int levelMaxSize2,top,n,i,width=4; if(BT!n家谱凹入表示法: top=1; stacktop=BT; /*根结点入栈*/ leveltop0=width; while (t

15、op0) p=stacktop; /*退栈并凹入显示该结点值*/ n=leveltop0; for (i=1;=n;i+) /*其中n为显示场宽,字符以右对齐显示*/%6s,p- for(i=n+1;=MaxWidth-6;i+=2) top-; if(p- /*将右子树根结点入栈*/ top+; stacktop=p- leveltop0=n+width; /*显示场宽增width*/ leveltop1=2; if (p-left! /*将左子树根结点入栈*/ leveltop1=1; void findson(BTree bt) BTree p;n查找指定父亲的所有儿子n父亲: p=fi

16、ndfather(bt,xm); if(p=NULL)不存在%s的父亲!,xm); p=p-%s没有儿子!%s有以下儿子!nt while(p! printf(%8s main() bt=creatree(); disptree(bt); findson(bt);运行结果建立一个家谱二叉树(以空格结尾): 姓名:张德 妻子:陈氏 父亲: 儿子:张文 儿妻:刘氏张武王氏张兵李氏张强张华家谱凹入表示法: 张德 陈氏 张文 刘氏 张兵 李氏 张强 张武 王氏 张华查找指定父亲的所有儿子有以下儿子! 张文 张武 4最短路径假设有n个城市组成一个公路网(有向的),并用代价邻接矩阵表示该网络,编写一个指定

17、城市v到其他各城市的最短路径的函数。方法:直接采用Dijkstra算法,略。5排序对于对于输入的数字按从小到大和从大到小两种顺序进行排序,并显示中间排序过程。提示 可以采用快速排序方法进行数字的两种排序。#define MAX 100void disparr();int aMAX,n,m;void creatarr() int i=0;建立原始数序nt元素个数:%dn); while(in)t第%d个元素:ai); i+; int cmp(int lval,int rval,int order) if(order=1) if(lval void quicksort(int x,int l,int r,int order) /*把xl至xr的元素进行快速排序*/ int i=l,j=r,k,temp; temp=xl;j)j & cmp(temp,xj,order) j-;/* if(i xi=xj;i+; cmp(xi,temp,order) i+; if(i xj=xi;j-; xi=temp;t(%d) ,m+); for(k=0;kn;k+)

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

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