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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

大数据结构实验报告材料.docx

1、大数据结构实验报告材料大连海事大学2016-2017-1学期数据结构实验报告选课序号: 42 班 级: 计科(二)班 学 号: * 姓 名: * 指导教师: * 成 绩: 2016年 11月 28日1. 实验目的(1)熟练掌握单循环链表操作的基本算法实现。(2)熟练掌握串模式匹配算法。(3)熟练掌握二叉树应用的基本算法实现。2. 实验内容2.1 实验一 客房管理(链表)实现功能:以带表头结点的单链表为存储结构,实现如下客房管理的设计要求。实验机时:8设计要求:(1)定义客房链表结点结构类型,以Hotel和*HLink命名,数据域:客房名称roomN、标准价格Price、入住价格PriceL(默

2、认值=标准价格*80%)、床位数Beds、入住状态State(空闲、入住、预订,默认值为空闲),指针域:*next;(2)实现创建客房基本情况链表函数void Build(HLink &H),输入客房名称、标准价格、床位数,将入住价格、入住状态修改为默认值,建议用文件操作来输入数据;(3)实现函数void updateH(HLink &H, int beds, char *state),将床位数为beds的客房入住状态改为state;(4)实现输出客房基本情况函数void Exp(HLink H),输出所有客房的客房名称、标准价格、入住价格、床位数、入住状态;(5)函数void Add(HLi

3、nk &H),将该链表中未入住的客房入住价格均加价20%;(6)函数void upBed(HLink &H,int beds),将该链表床位数不超过beds的结点都放在床位数超过beds的结点后面;(7)求出入住价格最高的客房函数HLink FirstH(HLink &H),该函数内return语句返回入住价格最高的客房结点指针,返回前将该结点在链表中删除;(8) 函数void MoveK1(HLink &H, int k),将单链表中倒数第k个结点移到第一个结点位置,注意:严禁采用先计算链表长度n再减k(即n-k)的方法;(9) 函数void ReverseN2(HLink &H),将单链表

4、的正中间位置结点之后的全部结点倒置的功能,注意:严禁采用先计算链表长度n再除以2(即n/2)的方法;(10)主控函数main()调用以上函数,输出(3)、(5)、(6)、(7)、(8)、(9)处理后的链表内容、输出入住价格最高的客房基本情况。可能用到的函数: 从文件中读取客房数据:fscanf(文件指针,%s %f,%d,p-roomN,&p-Price,&p-Beds); 输出客房数据:printf(%s%8.1f%8.1f%6d%8sn,p-roomN,p-Price,p-PriceL,p-Beds,p-State); 字符串赋值函数:char* strcpy(char *, const

5、char *); 字符串比较函数:int strcmp(const char *, const char *)#include#include#includetypedef struct HNode /定义客房链表结点结构 char roomN7; /客房名称 float Price; /标准价格 float PriceL; /入住价格(默认值=标准价格*80%) int Beds; /床位数Beds char State5; /入住状态(值域:空闲、入住、预订,默认值为空闲 struct HNode *next; /指针域 Hotel, *HLink;2.2 实验二 串模式匹配算法(串)实现

6、功能: 从主串中第K个字符起,求出子串在主串中首次出现的位置,即模式匹配或串匹配。要求用三种模式匹配算法分别实现:朴素的模式匹配算法(BF算法)KMP改进算法(Next )KMP改进算法(NextVal )实验机时:6设计要求:首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。程序运行后,给出5个菜单项的内容和输入提示:1输入主串、子串和匹配起始位置2朴素的模式匹配算法3KMP改进算法(Next )4KMP改进算法(NextVal )0退出管理系统请选择04:菜单设计要求:使用数字04来选择菜单项,其它输入则不起作用。输出结果要求:输出各趟匹配详细过程(其中3、4,首

7、先输出Next 或者NextVal 的各元素的数值),最后输出单个字符比较次数、匹配成功时的位置序号或者匹配失败提示信息。2.3 实验三 求二叉树上结点的路径(二叉树)实现功能:在采用链式存储结构存储的二叉树上,以bt指向根结点,p指向任一给定的结点,编程实现求出从根结点bt到给定结点p之间的路径。实验机时:6设计思路:数据结构:typedef struct node char data; /数据域 struct node *lchild , *rchild; /左右孩子指针BinTNode; /树中结点类型typedef BinTNode *BinTree; 主要实现函数:二叉树的建立求指定

8、结点路径二叉树的前、中、后序遍历算法查找函数主控函数及运行环境设置3.实验步骤按以上实验内容的要求,给出实验步骤,包括程序流程图、源程序和运行结果截图等。3.1 实验一 客房管理(链表)3.1.1程序流程图3.1.1源程序#include#include#include#include/定义客房链表结点结构typedef struct HNode char roomN7; /客房名称 float Price; /标准价格 float PriceL; /入住价格(默认值=标准价格*80%) int Beds; /床位数Beds char State5; /入住状态(值域:空闲、入住、预订,默认值

9、为空闲) struct HNode *next; /指针域 Hotel, *HLink;/函数声明void Build(HLink &H);void updateH(HLink &H, int beds, char state);void Exp(HLink H);void Add(HLink &H);void upBed(HLink &H,int beds);HLink FirstH(HLink &H);void MoveK1(HLink &H, int k);void ReverseN2(HLink &H);/主函数void main() HLink L,h; int id,k,Beds;

10、 int beds_num; char beds_state5; while(1) printf(n *欢迎进入客房信息管理系统*); printf(nn 请查看相关功能,并【 !按顺序! 】 输入相关功能编号,谢谢!n); printf( *n); printf( | 1-查看所有客房信息 |n); printf( | 2-更改客房入住状态 |n); printf( | 3-所有未入住客房加价20% |n); printf( | 4-更改床号排列顺序 |n); printf( | 5-查找入住价格最高的客房并清空该信息,然后输出更新后信息 |n); printf( | 6-将倒数第K个客房排

11、在首行 |n); printf( | 7-正中间位置结点之后的全部结点倒置后的客房信息 |n); printf( | |n); printf( | !其他-退出 |n); printf( *nn); printf( ! 请选择:); scanf(%d,&id); if(id7) break; switch(id) case 1: Build(L); Exp(L); break; case 2: printf(n 更改客房入住状态:nn); printf(输入要更改的床位数:); scanf(%d,&beds_num); printf(n输入要更改的客房状态(空闲、入住、预订):); scanf

12、(%s,beds_state); updateH(L,beds_num,beds_state); printf(输出更新后的客房信息n); Exp(L); break; case 3: printf(n ! 将该链表中未入住的客房入住价格均加价20%n); Add(L); printf(输出加价后的客房信息n); Exp(L); break; case 4: printf(输入Beds数:); scanf(%d,&Beds); upBed(L,Beds); Exp(L); break; case 5: h=FirstH(L); printf(n ! 输出入住客房价格最高的客房信息,并删除该节点

13、nn); printf(-n); printf(客房名称 标准价格 入住价格 床位数 入住状态n); printf(-n); printf(%s %8.1f %8.1f %6d %8sn,h-roomN,h-Price,h-PriceL,h-Beds,h-State); printf(-nn); printf(nn输出删除后的客房信息n); Exp(L); break; case 6: printf(输入K值(1kroomN,&p-Price,&p-Beds); p-PriceL=(float)0.8 * p-Price; strcpy(p-State,空闲); rear-next=p; re

14、ar=p; rear-next=NULL; fclose(infile);/将床位数为beds客房入住状态改为statevoid updateH(HLink &H, int beds, char state) HLink p; p=H-next; while(p) if(p-Beds=beds) strcpy(p-State,state); p=p-next; /输出所有客房的客房名称、标准价格、入住价格、床位数、入住状态;void Exp(HLink H) HLink p; p=H-next; if (!p) printf(数据为空!n); return; printf(n*客房信息输出如下

15、*n); printf(-n); printf(客房名称 标准价格 入住价格 床位数 入住状态n); printf(-n); while(p) printf(%s %8.1f %8.1f %6d %8sn,p-roomN,p-Price,p-PriceL,p-Beds,p-State); p=p-next; printf(n);/将该链表中未入住的客房入住价格均加价20%void Add(HLink &H) HLink p; p=H-next; while(p) if(!strcmp(p-State,空闲) p-PriceL=(float)1.2*p-PriceL; p=p-next; /将该

16、链表床位数不超过beds的结点都放在床位数超过beds的结点后面void upBed(HLink &H,int beds) HLink p=H,q,t; if(p-next-Bedsbeds) p=p-next; while(p-next) if(p-next-Bedsbeds) t=p-next; p-next=p-next-next; q=H-next; H-next=t; H-next-next=q; else p=p-next; /求出入住价格最高的客房函数,返回入住价格最高的客房结点指针,返回前将该结点在链表中删除;HLink FirstH(HLink &H) HLink p,q,r

17、=H; p=H-next; q=H-next; float priceMax=0.0; while(p) if( p-PriceL priceMax) priceMax=p-PriceL; /q=q-next; /r=r-next; p=p-next; while(q-PriceL!=priceMax) q=q-next; r=r-next; r-next=q-next; return q; /将单链表中倒数第k个结点移到第一个结点位置void MoveK1(HLink &H, int k) HLink p,q,r,f; p=H-next; q=H-next; r=H; f=r-next; f

18、or(int i=0;inext; while(p) p=p-next; q=q-next; r=r-next; r-next=q-next; H-next=q; q-next=f;/将单链表的正中间位置结点之后的全部结点倒置的功能void ReverseN2(HLink &H) HLink p=H,q=H,h; while(q) if(p-next) p=p-next-next; else p=p-next; break; q=q-next; p=q-next;q-next=NULL; while(p) h=p-next; p-next=q-next; q-next=p; p=h; 3.1.

19、1运行结果截图3.2 实验二 串模式匹配算法(串)3.2.1程序流程图 3.2.1源程序#include#include#include#include#define MAXSTRLEN 255typedef unsigned char SStringMAXSTRLEN+1;static int tem,tem1;/输入字符串void getString(SString S) SString s; printf(请输入字符串【测试串:ebababababcaababababcabadaaaac babababcabad】: ); scanf(%s,s); int i=0; while(si!=

20、0) i+;S0=i; for(int j=0;ji+1;j+) Sj+1=sj;/输出字符串void Output(SString S,SString T) for(int i=0;iS0+2;i+) printf(-); printf(n 序号 : ); for(int num=1;num=S0;num+) printf(%-4d,num); printf(n); printf(n 主串 : ); for(int num1=1;num1=S0;num1+) printf(%-4c,Snum1); printf(n); printf(n 副串 : ); for(int num2=1;num2

21、=T0;num2+) printf(%-4c,Tnum2); printf(nn); /朴素的模式匹配法void Index(SString S,SString T,int pos) int i=pos,j=1; while(i=S0&j=T0) if(Si=Tj) +i; +j; else i=i-j+2; j=1; if(iT0) printf(【匹配点为:%d】,i - T0); else printf(【匹配点为:%d】,0); /利用模式串T的next函数求T在主串S中第pos字符之后的位置的KMP算法void Index_KMP_next(SString S,SString T,i

22、nt pos,int next) int i = pos,j = 1; printf(n第%-2d趟: ,tem); for(int num=0;numi-1;num+) printf(%-4c, ); while (i=S0 & j=T0) if (j=0 | Si=Tj) if(j=0) +i; +j; else printf(%-4c,Tj); +i; +j; else printf(%-4c,Tj); printf(nn第%-2d趟: ,+tem); j = nextj; for(int num2=0;num2i-j;num2+) printf(%-4c, ); for(int num=1;numj;num+) printf(%c ,Tnum); if(iT0) printf(【此处匹配点为:%d】,i - T0); else printf(【此处匹配点为:%d】,0); /利用模式串T的next函数修正值求T在主串S中第pos字符之后的位置的高效KMP算法void Index_K

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

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