数据结构实验源代码Word格式文档下载.docx

上传人:b****8 文档编号:22735474 上传时间:2023-02-05 格式:DOCX 页数:75 大小:58.81KB
下载 相关 举报
数据结构实验源代码Word格式文档下载.docx_第1页
第1页 / 共75页
数据结构实验源代码Word格式文档下载.docx_第2页
第2页 / 共75页
数据结构实验源代码Word格式文档下载.docx_第3页
第3页 / 共75页
数据结构实验源代码Word格式文档下载.docx_第4页
第4页 / 共75页
数据结构实验源代码Word格式文档下载.docx_第5页
第5页 / 共75页
点击查看更多>>
下载资源
资源描述

数据结构实验源代码Word格式文档下载.docx

《数据结构实验源代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验源代码Word格式文档下载.docx(75页珍藏版)》请在冰豆网上搜索。

数据结构实验源代码Word格式文档下载.docx

data.val=b;

//输入密码

data.num=j;

//输入序号

next=head->

}

//将尾结点的next域指向第一个结点,构成循环链表

请输入一个数m:

m);

if(m<

=0)printf("

输入错误"

do{

i=1;

while(i!

=m){//将q指针指向所要输出的结点的前一结点

i++;

p=q->

//p指向输出结点

next=p->

//将输出结点的前结点的next域指向输出结点的后结点

num:

%d\tval:

%d\n"

p->

data.num,p->

data.val);

//输出

m=p->

data.val;

//取得输出结点的密码

free(p);

}while(q->

next!

=q);

//只剩最后一个结点时结束

q->

data.num,q->

//输出最后一个结点

free(q);

//释放最后一个结点

free(head);

//释放头结点

system("

pause"

}

第3章

(1)

iostream>

conio.h>

#defineM4

#defineN6

#defineMaxSize100

usingnamespacestd;

intmg[M+2][N+2]={

{1,1,1,1,1,1,1,1},

{1,0,0,1,0,0,0,1},

{1,1,0,0,0,0,0,1},

{1,0,0,1,0,1,0,1},

{1,0,0,0,0,0,0,1},

};

struct

inti,j,di;

Stack[MaxSize],Path[MaxSize];

inttop=-1;

intcount=1;

intminlen=MaxSize;

voidPrint()

for(inti=0;

i<

M+2;

i++)

for(intj=0;

j<

N+2;

j++)

if(mg[i][j])cout<

<

1"

;

elsecout<

0"

cout<

endl;

voidmgpath()

{intcount=1;

inti,j,di,find,k;

top++;

Stack[top].i=1;

Stack[top].j=1;

Stack[top].di=-1;

mg[1][1]=-1;

while(top>

-1)

i=Stack[top].i;

j=Stack[top].j;

di=Stack[top].di;

if(i==M&

&

j==N)

cout<

count++<

for(k=0;

k<

=top;

k++)

("

Stack[k].i<

"

Stack[k].j<

)"

"

if((k+1)%5==0)cout<

if(top+1<

minlen)

Path[k]=Stack[k];

minlen=top+1;

mg[Stack[top].i][Stack[top].j]=0;

top--;

find=0;

while(di<

4&

find==0)

di++;

switch(di)

case1:

i=Stack[top].i;

j=Stack[top].j+1;

break;

case2:

i=Stack[top].i+1;

j=Stack[top].j;

if(mg[i][j]==0)find=1;

if(find==1)

Stack[top].di=di;

Stack[top].i=i;

Stack[top].j=j;

mg[i][j]=-1;

else

最短路径如下:

长度:

minlen<

路径:

minlen;

Path[k].i<

Path[k].j<

if((k+1)%5==0)cout<

intmain()

迷宫地图如下\n"

Print();

迷宫所有路径如下:

mgpath();

getch();

(2)

malloc.h>

#include<

assert.h>

time.h>

#defineLENsizeof(STACK)

typedefstructnode

intdata;

structnode*link;

}STACK[50],*STLink;

STLinktop[50];

voidinit(STLinktop[],intm)/*初始化堆栈*/

top[m]=NULL;

intempty(STLinktop[],intn)/*判断是否为空*/

return(top[n]==NULL);

intpush(STLinktop[],intA,intm)/*入栈*/

STLinkp;

if(!

(p=(STLink)malloc(LEN)))

return0;

p->

data=A;

link=top[m];

top[m]=p;

return1;

intpop(STLinktop[],intm)/*出栈*/

intA;

p=top[m];

A=p->

data;

top[m]=top[m]->

link;

returnA;

inttrainpush(intM,intA[],STLinktop[])

intm,k=0,l;

top[k]=NULL;

/*初始化第一个堆栈*/

push(top,A[0],0);

/*把第一节车厢压入缓冲铁轨*/

缓冲铁轨:

1栈顶值:

top[0]->

data);

for(m=1;

m<

M;

m++)/*把车厢都压入缓冲铁轨*/

if(A[m]>

top[k]->

data)/*前面所有栈顶值最大值一定为最后一个栈的栈顶值,如果此次需

进栈的车厢号比前面所有栈顶值都大重新建立一个新的栈并把车厢号压入新的栈的栈底*/

init(top,++k);

push(top,A[m],k);

printf("

缓冲铁轨:

%d栈顶值:

k+1,top[k]->

else

/*将此次需进栈的车厢号与所有栈顶值比较,插入到第一次遇到的栈顶值比将要入栈的车厢号要大的栈中,比如

要插入10号车厢,缓冲铁轨的栈顶值排列如下:

2、11、5、12,13,将10插在11所在的栈的栈顶*/

{l=0;

while(l<

=k)

top[l]->

data)

l++;

push(top,A[m],l);

%d栈顶值:

l+1,top[l]->

l=k+1;

returnk+1;

voidtrainpop(intM,intA[],STLinktop[],intN)

intm,n=0,min,l=0,amin=0,bmin=0;

/*把所有车厢都压出缓冲铁轨*/

min=top[n]->

for(m=0;

m++)

for(l=n+1;

l<

N;

l++)

if((top[l]!

=NULL)&

(top[l]->

data<

min))/*取缓冲铁轨中栈顶元素最小的*/

min=top[l]->

amin=l;

/*将栈顶值最小的栈的栈号保存起来*/

A[m]=pop(top,amin);

/*把最小的栈顶元素压出栈并赋值给A*/

A[%d]=%d\n"

m,A[m]);

if(top[amin]==NULL)

min=top[amin+1]->

n=amin+1;

min=top[amin]->

n=amin;

intmain(void)

inti,M,A[100],N=0;

请输入火车车厢总长:

M);

请输入未转轨前车厢的排列顺序,不能输入重复相同数据且不可遗漏车厢号\n"

for(i=0;

i<

scanf("

A[i]);

for(i=0;

i,A[i]);

N=trainpush(M,A,top);

所使用的缓冲铁轨数为:

N);

火车转轨后,出轨顺序如下,请核对是否是所需顺序:

trainpop(M,A,top,N);

第5章

inti,j,n,a[16][16];

/*全局定义方阵行、列、阶数以及最大方阵容量*/

voidcreat()/*建立魔方阵*/

intk;

j=n/2+1;

a[1][j]=1;

for(k=2;

=n*n;

i=i-1;

j=j+1;

if((i<

1)&

(j>

n))

i=i+2;

j=j-1;

if(i<

1)i=n;

if(j>

n)j=1;

if(a[i][j]==0)

a[i][j]=k;

voidprint()/*输出魔方阵*/

for(i=1;

%5d"

a[i][j]);

voidmain()

intk,p,m;

while

(1)

p=1;

while(p==1)

请输入n(n<

=15,n是奇数)\n"

if((n!

=0)&

(n<

=15)&

(n%2!

=0))

矩阵阶数是:

n);

p=0;

else{

输入错误请重新输入\n"

a[i][j]=0;

creat();

print();

第6章

#defineVERBOSE

shortfather[512];

unsignedshortcode[256],heap_length;

unsignedlongcompress_charcount,file_size,heap[257];

unsignedcharcode_length[256];

longfrequency_count[512];

shortdecomp_tree[512];

FILE*ifile,*ofile;

voidbuild_decomp_tree(),decompress_image();

voiddecompress(charf1[],charf2[]),compress(charf1[],charf2[]);

unsignedshortgenerate_code_table();

voidbuild_code_tree(),build_initial_heap();

voidcompress_image(),compression_report();

voidget_frequency_count();

intmain()

charch,file[2][12];

~哈夫曼编码~"

*1.压缩文件*2.解压文件*3.退出"

***请选择要执行的操作***:

cin>

>

ch;

while(ch)

switch(ch)

{

case'

1'

:

printf("

\nHUFF1:

HuffmanCodeCompressionProgram."

\n14-Aug-90BillDemas.Version1.0\n\n"

printf("

压缩文件名:

scanf("

%s"

file[0]);

生成文件名:

file[1]);

compress(file[0],file[1]);

ch='

0'

break;

2'

\nDHUFF:

HuffmanCodeDecompressionProgram."

解压文件名:

decompress(file[0],file[1]);

3'

exit(0);

default:

cout<

cin>

}

voidcompress(char*f1,char*f2)

if((ifile=fopen(f1,"

rb"

))!

=NULL)

fseek(ifile,0L,2);

file_size=(unsignedlong)ftell(ifile);

#ifdefVERBOSE

printf("

(1)GettingFrequencyCounts.\n"

#endif

fseek(ifile,0L,0);

get_frequency_count();

(2)BuildingInitialHeap.\n"

build_initial_heap();

(3)BuildingtheCodeTree.\n"

build_code_tree();

(4)GeneratingtheCodeTable.\n"

if(!

generate_code_table())

ERROR!

CodeValueOutofRange.CannotCompress.\n"

else

(5)Compressing&

CreatingtheOutputFile.\n"

if((ofile=fopen(f2,"

wb"

{

fwrite(&

file_size,sizeof(file_size),1,ofile);

fwrite(code,2,256,ofile);

fwrite(code_length,1,256,ofile);

fseek(ifile,0L,0);

compress_image();

fclose(ofile);

}

else

printf("

\nERROR:

Couldn'

tcreateoutputfile\n"

compression_report();

fclose(ifile);

--Filenotfound!

voiddecompress(char*f1,char*f2)//解压

fread(&

file_size,sizeof(file_size),1,ifile);

fread(code,2,256,ifile);

fread(code_length,1,256,ifile);

(1)Buildingthetree.\n"

build_decomp_tree();

(2)Decompressing&

if((ofile=fopen(f2,"

decompress_image();

fclose(ofile);

printf("

fclose(ifile);

}//decompress

voidbuild_decomp_tree()

registerunsignedshortloop1;

registerunsignedshortcurrent_index;

unsignedshortloop;

unsignedshortcurrent_node=1;

decomp_tree[1]=1;

for(loop=0;

loop<

256;

loop++)

if(code_length[loop])

current_index=1;

for(loop1=code_length[loop]-1;

loop1>

0;

loop1--)

current_index=(decomp_tree[current_index]<

1)+

((code[loop]>

loop1)&

1);

if(!

(decomp_tree[current_index]))

decomp_tree[current_index]=++current_node;

decomp_tree[(decomp_tree[current_i

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

当前位置:首页 > 法律文书 > 调解书

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

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