数据结构实验报告Word格式.docx

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

数据结构实验报告Word格式.docx

《数据结构实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告Word格式.docx(47页珍藏版)》请在冰豆网上搜索。

数据结构实验报告Word格式.docx

i++)

{

scanf("

%d"

&

m);

if((m>

0)&

&

(m<

=a))

{

if(i==1)

{

head=malloc(sizeof(structnode));

head->

num=i;

head->

secret=m;

next=head;

basic=head;

}

else

n=malloc(sizeof(structnode));

n->

basic->

next=n;

basic=n;

}

else

break;

}

returnbasic;

}

voidPrint(conststructnode*head)

你输入的数为:

序号\t密码:

do

printf("

%d\t%d\n"

head->

next->

num,head->

secret);

head=head->

next;

}while(head->

num!

=1);

voidmain()

inti,j=1,m,t;

structnode*p;

请输入m的限制值:

scanf("

p=Basic_Create(m);

Print(p);

顺序\t序号\n"

{

for(i=1;

m;

p=p->

%d\t%d\n"

j++,t=p->

num);

m=p->

secret;

p->

next=p->

}while(p->

=t);

调试过程:

虽然本实验比较简单,但在调试过程中还是出现了因为不细心导致的问题,例如缺少分号、排序不对应等,经过多次调试之后,试验取得成功。

结果分析:

输入m的限制值:

20,密码:

3、1、7、2、4、8、4,输出结果:

6、1、4、7、2、3、5.

实验二停车场管理

完成

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列,若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等侯,一旦有车开走,则排在便道上的第一辆车即可开入;

当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

试为停车场编制按上述要求进行管理的模拟程序。

(1)深入了解栈和队列的特性,掌握栈和队列的存储方法。

(2)掌握栈和队列的基本操作,如初始化、入栈(队列)、出栈(队列)等,并能在实际问题背景下灵活运用。

process.h>

#defineFEE1

inti=0,j=1,k,r_1;

typedefstructbasic

charmess_1;

charmess_2;

shortintnum;

shortsj;

structbasiccar;

voidPrint_In(structbasic*middle)

状态\t车牌号\t时间\n"

while(middle->

mess_2=='

A'

%c\t%d\t%d\n"

middle->

mess_2,middle->

num,middle->

sj);

middle++;

voidPrint_ord(inta,structbasic*p,structbasic*q)

\n第%d次移动结果:

a);

停车场\n"

Print_In(p);

辅助车库:

Print_In(q);

voidPrint_ord2(inta,structnode*middle,structnode*q)

通道\n"

middle=q->

for(r_1=1;

r_1<

j;

r_1++)

car.mess_2,middle->

car.num,middle->

car.sj);

middle=middle->

voidPrint_Out(structnode*middle)

for(k=0;

k<

k++)

structbasicparking_lot[LENGTH],*p,parking_help[LENGTH];

structnode*q,*head,*middle;

intn,hour,car_num,diff_t,money,ans,r;

charc_1;

shortintsig=1,sig_2;

请输入停车场最大停车数n:

n);

while(sig)

p=malloc(sizeof(structbasic));

请输入状态:

(0:

E1:

A2:

D)\n"

c_1);

请输入车牌号:

car_num);

请输入时间:

hour);

switch(c_1)

case1:

c_1='

;

p->

mess_2=c_1;

num=car_num;

sj=hour;

if(i<

n)

p->

mess_1='

I'

parking_lot[i]=*p;

system("

cls"

printf("

停车场未满\n"

i++;

Print_In(parking_lot);

if(j==1)

{

head=malloc(sizeof(structnode));

head->

car=*p;

car.mess_1='

O'

q=head;

}

else

middle=malloc(sizeof(structnode));

middle->

q->

next=middle;

q=middle;

停车场已满\n"

Print_In(parking_lot);

通道:

middle=head;

Print_Out(middle);

j++;

case2:

r=0;

system("

printf("

是否显示车辆出库具体信息?

(按非零键显示):

scanf("

sig_2);

for(k=0;

=i-j;

if(parking_lot[k].num==car_num)

ans=1;

break;

ans=0;

if(ans==0)

for(k=1;

if(middle->

car.num==car_num)

{

ans=2;

break;

}

middle=middle->

if(ans==1)

此车在停车场内:

k=i-j;

while(parking_lot[k].num!

=car_num)

parking_help[r]=parking_lot[k];

parking_lot[k].mess_2='

'

if(sig_2)

Print_ord(r+1,parking_lot,parking_help);

k--;

r++;

r_1=r;

diff_t=hour-parking_lot[k].sj;

money=diff_t*FEE;

parking_lot[k].mess_2='

if(sig_2)

Print_ord(r+1,parking_lot,parking_help);

r--;

r_1++;

while(r!

=-1)

parking_lot[k]=parking_help[r];

parking_help[r].mess_2='

Print_ord(r_1+1,parking_lot,parking_help);

k++;

r_1++;

r--;

if(j==2)

parking_lot[k]=head->

car;

j--;

if(j>

2)

parking_lot[k]=head->

head=head->

q->

if(sig_2)

Print_ord(r_1+1,parking_lot,parking_help);

j--;

printf("

车辆信息:

车牌号:

%d停车时间:

%d分钟停车费用%d元\n"

car_num,diff_t,money);

i--;

elseif(ans==2)

此车在通道上:

k=1;

while(q->

car.num!

for(r_1=1;

j-1;

q=head;

if(sig_2)

Print_ord2(k,middle,q);

k++;

for(r_1=1;

head=head->

head=head->

q->

Print_ord2(k,middle,q);

\t\t\t您的车不在本停车场内...\n"

case0:

sig=0;

default:

此轮输入有误,请重新输入\n"

此程序比较繁琐,牵扯到站和队列的相关问题,入站出站得按一定顺序来做,另外,本程序计算费用时还应考虑在过道以及停车场内的时间,要具体的问题具体分析,由于时间原因,本程序未能对车辆的大小收取不等价的费用,不太完美。

基本要求:

输入n=2,(a,1,5),(1,2,10),(d,1,15,),(a,3,20),(a,4,15),(a,5,30),(d,2,35),(d,4,40),(e,0,0)。

结果如下:

选作内容:

汽车从便道上开走

实验三基于哈夫曼(Huffmen)编码的通信系统的设计与实现

本实验主要由?

)完成

利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。

但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。

试设计一个基于哈夫曼(Huffmen)编码的通信系统。

(1)掌握二叉树的存储结构及其相关操作。

(2)掌握构造哈夫曼树的基本思想,及其编码/译码过程。

流程图

string.h>

iostream.h>

#include"

huffman.h"

inti,j;

intn=0;

//n是记录总够有都少个不同的字母

intm;

//m是记录总共有多少个字符

charmessage[100];

intrecord[26];

//记录每一个字母的权值

intc[26];

//记录权值不为0的字母

C_valuea[26];

//记录字母和所对应的权值

HTNode*HT;

char**HC;

char**Code;

//b是对HC的扩展

cout<

<

"

请输入一条句子"

endl;

cin>

>

message;

m=strlen(message);

//求字符串的长度

//cout<

m<

for(i=0;

26;

record[i]=0;

c[i]=0;

100;

if(message[i]=='

a'

)record[0]++;

if(message[i]=='

b'

)record[1]++;

c'

)record[2]++;

d'

)record[3]++;

e'

)record[4]++;

f'

)record[5]++;

g'

)record[6]++;

h'

)record[7]++;

i'

)record[8]++;

j'

)record[9]++;

k'

)record[10]++;

l'

)record[11]++;

m'

)record[12]++;

n'

)record[13]++;

o'

)record[14]++;

q'

)record[15]++;

p'

)record[16]++;

r'

)record[17]++;

s'

)record[18]++;

t'

)record[19]++;

u'

)record[20]++;

v'

)record[21]++;

w'

)record[22]++;

x'

)record[23]++;

y'

)record[24]++;

z'

)record[25]++;

for(i=0,j=0;

if(record[i]!

=0)

n++;

c[j]=i;

//记录权值不为0的字母有哪些

j++;

n;

a[i].word=c[i]+97;

//a[i]记录的是字母,字母的个数,和字母的位置

a[i].num=record[c[i]];

a[i].num_what=i;

cout<

a[i].word<

"

a[i].num<

a[i].num_what<

num"

\t"

weight"

parent"

lchild"

rchild"

HT=HuffmanTree(n,a);

HC=HuffmanCode(HT,n);

Code=Put_Huffmancode(message,HC,a,n,m);

Code[i]<

Put_(HT,Code,n,m,a);

/*构造HUFFMAN树*/

HTNode*HuffmanTree(intn,C_value*w)

inta;

ints1,s2;

m=2*n-1;

HTNode*HT,*p,*q;

HT=(HTNode*)malloc(m*sizeof(HTNode));

for(p=HT,i=0;

i++,p++,w++)

weight=w->

num;

parent=0;

rchild=0;

lchild=0;

for(p,i=n;

i++,p++)

weight=0;

for(i=n;

for(q=HT,j=0;

j<

i;

j++,q++)

if(q->

parent==0)

a=q->

weight;

//a记录的是第一个父亲节点是0的权值

s1=j;

//s1记录的是第一个父亲节点是0的位置

break;

if(q->

weight<

a)

s1=j;

a=q->

s2=s1;

HT[s2].parent=j;

HT[i].lchild=s2;

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

当前位置:首页 > 高等教育 > 院校资料

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

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