数据结构实验指导书.docx

上传人:b****2 文档编号:2458101 上传时间:2022-10-29 格式:DOCX 页数:11 大小:18.25KB
下载 相关 举报
数据结构实验指导书.docx_第1页
第1页 / 共11页
数据结构实验指导书.docx_第2页
第2页 / 共11页
数据结构实验指导书.docx_第3页
第3页 / 共11页
数据结构实验指导书.docx_第4页
第4页 / 共11页
数据结构实验指导书.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构实验指导书.docx

《数据结构实验指导书.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构实验指导书.docx

数据结构实验指导书

目录

实验一线性表1

实验二数组的基本操作3

实验三队列的基本操作5

实验四栈的基本操作7

实验五二叉树操作树10

实验六图的基本操作11

《数据结构实验指导书》

实验一线性表

一、实验目的:

1、掌握使用TurboC2.0上机调试线性表的基本方法;

2、掌握线性表的基本操作:

插入、删除、查找以及线性表合并等运算在顺序存储结构和链接存储结构上。

二、实验环境:

PC机、TurboC或VisualC++

三、实验描述:

一元多项式的相加

四、实验要求:

(1)建立两个一元多项式A、B,按指数降序排列。

(2)实现A+B,输出其运算结果。

五、实验步骤:

(1)用带头结点的单链表存储多项式A、B,多项式的类型定义如下:

typedefstruct{//项的表示,多项式的项作为LinkList的数据元素

floatcoef;//系数

intexpn;//指数

}term,ElemType;

typedefstructLnode{

ElemTypedata;

StructLnode*next;

}*LinkList;

typedefLinkListpolynomial;//用带头结点的有序(按指数递增)单链表表示多项式

(2)基本操作:

intcmp(terma,termb)

//比较a于b的指数,分别返回-1,0,1

voidCreatPolyn(polynomial&p,intm)

//输入m项的系数和指数,建立表示一元多项式的有序单链表p

voidPrintPolyn(polynomalp)

//输出多项式的各项

voidAddPolyn(polynomial&pa,polynomial&pb)

//多项式相加:

pa=pa+pb,利用两个多项式的结点构成“和多项式”

(3)程序流程

polynomalA,B;//定义多项式A,B

intm,n;//定义多项式A,B的项数

CreatPolyn(A,m);//创建有m项的多项式A,

PrintPolyn(A);//输出多项式A;

CreatPolyn(B,n);//创建有n项的多项式B

PrintPolyn(B);//输出多项式B

AddPolyn(A,B);//两个多项式相加A=A+B

PrintPolyn(A);//输出相加的结果A

(4)测试数据:

1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(7+2x+11x9-3.1x11)

2)(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5)

3)(x+x3)+(-x-x3)=0

4)(x+x2+x3)+0=(x+x2+x3)

实验二数组的基本操作

一、实验目的:

掌握各种内部排序算法及各种内部排序的效率。

二、实验环境:

PC机、TurboC或VisualC++

三、实验描述:

通过随机数据比较各种内部排序算法。

四、实验要求:

(1)随机产生5组100个数据。

(2)对冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序的关键字比较和交换次数进行统计。

五、实验步骤:

(1)用顺序存储结构存储数据

(2)产生100个随机数

(3)用上述内部排序算法(算法见)对

(2)的随机数进行排序,并统计比较次数和交换次数。

参考算法:

#defineM5

#defineN4

#include"stdio.h"

main()

{inti,j;

staticfloatscore[M+1][N+1]={{78,85,83,65},{88,91,89,93},{72,65,54,75},{86,88,75,60},{69,60,50,72}};

for(i=0;i

{for(j=0;j

{score[i][N]+=score[i][j];

score[M][j]+=score[i][j];

}

score[i][N]/=N;

}

for(j=0;j

score[M][j]/=M;

clrscr();

printf("学生编号课程1课程2课程3课程4个人平均\n");

for(i=0;i

{printf("学生%d\t",i+1);

for(j=0;j

printf("%6.1f\t",score[i][j]);

printf("\n");

}

for(j=0;j<8*(N+2);j++)

printf("-");

printf("\n课程平均");

for(j=0;j

printf("%6.1f\t",score[M][j]);

printf("\n");

getch();

}

(4)重复

(2)(3)共5次。

(5)给出结论。

实验三队列的基本操作

一、实验目的:

掌握队列的基本操作:

初始化队列、判队列为空、出队列、入队列等运算。

二、实验环境:

PC机、TurboC或VisualC++

三、实验描述:

通过队列的操作掌握队列的各种性质。

四、实验要求:

(1)随机产生5组100个数据,加入队列。

(2)初始化队列、判队列为空、出队列、入队列等运算

五、实验步骤:

(1)产生杨辉三角数据

(2)利用队列的基本操作实现杨辉三角的输出

算法如下:

voidout_number(intn);

{

init_queue(Q);

printf

(1);

en_queue(Q,s1+s2);

for(I=2;I<=n;I++)

{s1=0;for(j=1;j<=I-1;j++)

{s2=out_queue(Q);

printf(s2);

en_queue(q,s1+s2);

s1=s2;

}

printf

(1);

en_queue(Q,1+s2);

}

参考程序如下

typedefstruct

{int*data;

intfront;

intrear;

}

sqqueue;

main()

{

inti,j,m,s1=0,s2=1;

sqqueueq;

clrscr();

q.data=(int*)malloc(100*sizeof(int));

q.rear=q.front=0;

q.data[q.rear]=s2;

q.rear++;

printf("%40d",s2);

for(i=2;i<=8;i++)

{s1=0;

for(m=1;m<=40-i;m++)

printf("%c",'');

for(j=1;j<=i-1;j++)

{s2=q.data[q.front];

q.front++;

printf("%d",s2);

q.data[q.rear]=s1+s2;

q.rear++;

s1=s2;

}

printf("%d\n",1);

q.data[q.rear]=1+s2;

q.rear++;

}

}

(3)查看结果,得出结论。

实验四栈的基本操作

一、实验目的:

掌握栈的基本操作:

初始化栈、判栈为空、出栈、入栈等运算。

二、实验环境:

PC机、TurboC或VisualC++

三、实验描述:

通过队列的操作掌握栈的各种性质。

四、实验要求:

1.认真阅读和掌握本实验的算法。

2.上机将本算法实现。

3.保存和打印出程序的运行结果,并结合程序进行分析。

五、实验步骤:

1、定义栈的顺序存取结构

2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)

3、定义一个函数用来实现上面问题:

1)十进制整数X和R作为形参

2)初始化栈

3)只要X不为0重复做下列动作

4)将X%R入栈

  5)X=X/R

6)只要栈不为空重复做下列动作

  7)栈顶出栈

  8)输出栈顶元素

 参考程序:

#defineMAXSIZE100

#include

structstack{

intdata[MAXSIZE];

inttop;

};

voidinit(structstack*s){

s->top=-1;

}

intempty(structstack*s){

if(s->top==-1)

return1;

else

return0;

}

voidpush(structstack*s,inti){

if(s->top==MAXSIZE-1){

printf("Stackisfull\n");

return;

}

s->top++;

s->data[s->top]=i;

}

intpop(structstack*s){

if(empty(s)){

printf("stackisempty");

return-1;

}

return(s->data[s->top--]);

}

voidtrans(intnum){

structstacks;

intk;

init(&s);

while(num){

k=num%16;

push(&s,k);

num=num/16;

}

while(!

empty(&s)){

k=pop(&s);

if(k<10)

printf("%d",k);

else

printf("%c",k+55);

}

printf("\n");

}

main(){

intnum;

clrscr();

printf("Inputanum,-1toquit:

\n");

scanf("%d",&num);

while(num!

=-1){

trans(num);

scanf("%d",&num);

}

}

 

实验五二叉树操作树

一、实验目的:

掌握二叉树的存储结构及先序、中序和后序三种基本遍历、层次遍历操作。

二、实验环境:

PC机、TurboC或VisualC++

三、实验描述:

二叉树的建立与遍历

四、实验要求:

1.采用递归方式建立二叉树

2.采用非递归方式建立二叉树

3.采用先序、中序和后序三种方式遍历该二叉树

4.按层次遍历该二叉树

五、实验步骤:

1.定义二叉树的结点类型及二叉树类型

2.递归方式建立二叉树(算法参见课本)

3.三种方式遍历二叉树(算法参见课本)

4.层次遍历该二叉树

5.非递归方式(按层次)建立二叉树

提示:

1.以三元组(F,C,L/R)形式表示输入一棵二叉树的诸边(F:

表示双亲结点的标识,C表示孩子结点标识,L/R表示作为F的左右孩子的标识)。

2.创建一个队列BQ,用于将输入的二叉树每个结点的起始地址及结点的值保存起来

3.按层次输入二叉树的每一个结点(以三元组形式),创建每一个新结点P,同时把该结点的起始地址及值入队BQ

4.每输入一个三元组,查找BQ中与F相同的值(查找父结点的起始地址),根据L/R的信息,将该结点作为F的左或右孩子(F->Lchild=P或F->Rchild=P)

实验六图的基本操作

一、实验目的:

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

当前位置:首页 > 人文社科 > 教育学心理学

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

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