大数据结构实验报告材料Word文件下载.docx

上传人:b****6 文档编号:21991581 上传时间:2023-02-02 格式:DOCX 页数:43 大小:700.14KB
下载 相关 举报
大数据结构实验报告材料Word文件下载.docx_第1页
第1页 / 共43页
大数据结构实验报告材料Word文件下载.docx_第2页
第2页 / 共43页
大数据结构实验报告材料Word文件下载.docx_第3页
第3页 / 共43页
大数据结构实验报告材料Word文件下载.docx_第4页
第4页 / 共43页
大数据结构实验报告材料Word文件下载.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

大数据结构实验报告材料Word文件下载.docx

《大数据结构实验报告材料Word文件下载.docx》由会员分享,可在线阅读,更多相关《大数据结构实验报告材料Word文件下载.docx(43页珍藏版)》请在冰豆网上搜索。

大数据结构实验报告材料Word文件下载.docx

(10)主控函数main()调用以上函数,输出(3)、(5)、(6)、(7)、(8)、(9)处理后的链表内容、输出入住价格最高的客房基本情况。

可能用到的函数:

从文件中读取客房数据:

fscanf(文件指针,"

%s%f,%d"

p->

roomN,&

p->

Price,&

Beds);

输出客房数据:

printf("

%s%8.1f%8.1f%6d%8s\n"

roomN,p->

Price,p->

PriceL,p->

Beds,p->

State);

字符串赋值函数:

char*strcpy(char*,constchar*);

字符串比较函数:

intstrcmp(constchar*,constchar*)

#include<

stdio.h>

stdlib.h>

string.h>

typedefstructHNode//定义客房链表结点结构

{

charroomN[7];

//客房名称

floatPrice;

//标准价格

floatPriceL;

//入住价格(默认值=标准价格*80%)

intBeds;

//床位数Beds

charState[5];

//入住状态(值域:

"

空闲"

、"

入住"

预订"

,默认值为"

structHNode*next;

//指针域

}Hotel,*HLink;

2.2实验二串模式匹配算法(串)

从主串中第K个字符起,求出子串在主串中首次出现的位置,即模式匹配或串匹配。

●要求用三种模式匹配算法分别实现:

⏹朴素的模式匹配算法(BF算法)

⏹KMP改进算法(Next[])

⏹KMP改进算法(NextVal[])

6

首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。

程序运行后,给出5个菜单项的内容和输入提示:

1.输入主串、子串和匹配起始位置

2.朴素的模式匹配算法

3.KMP改进算法(Next[])

4.KMP改进算法(NextVal[])

0.退出管理系统

请选择0—4:

●菜单设计要求:

使用数字0—4来选择菜单项,其它输入则不起作用。

●输出结果要求:

输出各趟匹配详细过程(其中3、4,首先输出Next[]或者NextVal[]的各元素的数值),最后输出单个字符比较次数、匹配成功时的位置序号或者匹配失败提示信息。

2.3实验三求二叉树上结点的路径(二叉树)

在采用链式存储结构存储的二叉树上,以bt指向根结点,p指向任一给定的结点,编程实现求出从根结点bt到给定结点p之间的路径。

●设计思路:

数据结构:

typedefstructnode{

chardata;

//数据域

structnode*lchild,*rchild;

//左右孩子指针

}BinTNode;

//树中结点类型

typedefBinTNode*BinTree;

主要实现函数:

⏹二叉树的建立

⏹求指定结点路径

⏹二叉树的前、中、后序遍历算法

⏹查找函数

主控函数及运行环境设置

3.实验步骤

按以上实验内容的要求,给出实验步骤,包括程序流程图、源程序和运行结果截图等。

3.1实验一客房管理(链表)

3.1.1程序流程图

3.1.1源程序

windows.h>

//定义客房链表结点结构

typedefstructHNode

//函数声明

voidBuild(HLink&

H);

voidupdateH(HLink&

H,intbeds,charstate[]);

voidExp(HLinkH);

voidAdd(HLink&

voidupBed(HLink&

H,intbeds);

HLinkFirstH(HLink&

voidMoveK1(HLink&

H,intk);

voidReverseN2(HLink&

//主函数

voidmain()

{

HLinkL,h;

intid,k,Beds;

intbeds_num;

charbeds_state[5];

while

(1){

printf("

\n****************欢迎进入客房信息管理系统******************"

);

\n\n请查看相关功能,并【!

!

按顺序!

】输入相关功能编号,谢谢!

\n"

*******************************************************************\n"

|1--查看所有客房信息|\n"

|2--更改客房入住状态|\n"

|3--所有未入住客房加价20%%|\n"

|4--更改床号排列顺序|\n"

|5--查找入住价格最高的客房并清空该信息,然后输出更新后信息|\n"

|6--将倒数第K个客房排在首行|\n"

|7--正中间位置结点之后的全部结点倒置后的客房信息|\n"

||\n"

|!

其他---退出|\n"

*******************************************************************\n\n"

!

请选择:

scanf("

%d"

&

id);

if((id<

1)||(id>

7))

break;

switch(id){

case1:

Build(L);

Exp(L);

break;

case2:

printf("

\n更改客房入住状态:

\n\n"

输入要更改的床位数:

scanf("

beds_num);

\n输入要更改的客房状态(空闲、入住、预订):

%s"

beds_state);

updateH(L,beds_num,beds_state);

输出更新后的客房信息\n"

case3:

\n!

将该链表中未入住的客房入住价格均加价20%%\n"

Add(L);

输出加价后的客房信息\n"

case4:

输入Beds数:

upBed(L,Beds);

case5:

h=FirstH(L);

输出入住客房价格最高的客房信息,并删除该节点\n\n"

-------------------------------------------------\n"

客房名称标准价格入住价格床位数入住状态\n"

%s%8.1f%8.1f%6d%8s\n"

h->

roomN,h->

Price,h->

PriceL,h->

Beds,h->

-------------------------------------------------\n\n"

\n\n输出删除后的客房信息\n"

case6:

输入K值(1<

k<

6):

k);

MoveK1(L,k);

case7:

\n输出正中间位置结点之后的全部结点倒置后的客房信息\n"

ReverseN2(L);

default:

你输入有误!

}

}

}

//正序创建链表:

从键盘输入结点数据

H)

{

HLinkrear;

HLinkp;

char*indata="

.\\studata.txt"

;

//数据输入文件路径及名称

FILE*infile;

//文件指针

infile=fopen(indata,"

r"

//打开文本文件

if(!

infile){

数据输入文件没找到!

exit

(1);

H=(HLink)malloc(sizeof(HNode));

rear=H;

while(!

feof(infile))//判断是否读取到文件结尾

p=(HLink)malloc(sizeof(HNode));

fscanf(infile,"

%s%f%d"

p->

PriceL=(float)0.8*p->

Price;

strcpy(p->

State,"

rear->

next=p;

rear=p;

rear->

next=NULL;

fclose(infile);

//将床位数为beds客房入住状态改为state

H,intbeds,charstate[])

p=H->

next;

while(p)

if(p->

Beds==beds)

strcpy(p->

State,state);

p=p->

//输出所有客房的客房名称、标准价格、入住价格、床位数、入住状态;

voidExp(HLinkH)

p)

数据为空!

return;

printf("

\n*************客房信息输出如下***************\n"

p=p->

//将该链表中未入住的客房入住价格均加价20%

if(!

strcmp(p->

))

p->

PriceL=(float)1.2*p->

PriceL;

//将该链表床位数不超过beds的结点都放在床位数超过beds的结点后面

H,intbeds)

HLinkp=H,q,t;

if(p->

next->

Beds>

beds)

while(p->

next)

{

t=p->

next=p->

q=H->

H->

next=t;

next=q;

}

else

//求出入住价格最高的客房函数,返回入住价格最高的客房结点指针,返回前将该结点在链表中删除;

HLinkp,q,r=H;

q=H->

floatpriceMax=0.0;

if(p->

PriceL>

priceMax)

priceMax=p->

//q=q->

//r=r->

while(q->

PriceL!

=priceMax)

q=q->

r=r->

r->

next=q->

returnq;

//将单链表中倒数第k个结点移到第一个结点位置

H,intk)

HLinkp,q,r,f;

r=H;

f=r->

for(inti=0;

i<

k;

i++)

H->

q->

next=f;

//将单链表的正中间位置结点之后的全部结点倒置的功能

HLinkp=H,q=H,h;

while(q)

p=p->

p=q->

q->

h=p->

q->

p=h;

3.1.1运行结果截图

3.2实验二串模式匹配算法(串)

3.2.1程序流程图

3.2.1源程序

#defineMAXSTRLEN255

typedefunsignedcharSString[MAXSTRLEN+1];

staticinttem,tem1;

//输入字符串

voidgetString(SStringS)

SStrings;

请输入字符串【测试串:

ebababababcaababababcabadaaaacbabababcabad】:

"

scanf("

s);

inti=0;

while(s[i]!

=0){i++;

S[0]=i;

for(intj=0;

j<

i+1;

j++)

S[j+1]=s[j];

//输出字符串

voidOutput(SStringS,SStringT)

S[0]+2;

i++)printf("

----"

\n序号:

for(intnum=1;

num<

=S[0];

num++)

%-4d"

num);

\n主串:

for(intnum1=1;

num1<

num1++)

%-4c"

S[num1]);

\n副串:

for(intnum2=1;

num2<

=T[0];

num2++)

T[num2]);

}

//朴素的模式匹配法

voidIndex(SStringS,SStringT,intpos)

inti=pos,j=1;

while(i<

=S[0]&

&

=T[0])

if(S[i]==T[j])

++i;

++j;

else

i=i-j+2;

j=1;

if(i<

=S[0]-T[0])

【匹配点为:

%d】\n"

i-T[0]);

Index(S,T,i);

else

if(j>

T[0])

%d】"

printf("

0);

//利用模式串T的next函数求T在主串S中第pos字符之后的位置的KMP算法

voidIndex_KMP_next(SStringS,SStringT,intpos,intnext[])

inti=pos,j=1;

\n第%-2d趟:

tem);

for(intnum=0;

i-1;

'

'

while(i<

=S[0]&

j<

if(j==0||S[i]==T[j])

if(j==0)

{

++i;

++j;

else

T[j]);

{

\n\n第%-2d趟:

++tem);

j=next[j];

for(intnum2=0;

i-j;

for(intnum=1;

j;

[%c]"

T[num]);

=S[0]-T[0]){

【此处匹配点为:

tem++;

Index_KMP_next(S,T,i,next);

else{

//利用模式串T的next函数修正值求T在主串S中第pos字符之后的位置的高效KMP算法

voidIndex_K

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

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

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