数据结构实验报告Word文档下载推荐.docx
《数据结构实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告Word文档下载推荐.docx(77页珍藏版)》请在冰豆网上搜索。
![数据结构实验报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/23/e05af82d-0d9e-40b9-a10e-d42d5d43f2ac/e05af82d-0d9e-40b9-a10e-d42d5d43f2ac1.gif)
序号
实验项目编号
实验名称
学时
必做
选做
学分数
实验类型
内容提要
基本操作
验证
综合
设计
1
抽象数据类型的表示与实现
2
√
线性表实验
4
线性表的存储实现及有关应用
3
栈和队列实验
栈和队列的基本操作及其实现,以及典型应用举例
稀疏矩阵实验
稀疏矩阵的压缩存储
5
树和二叉树实验
树的两种种存储结构,及各种操作的算法实现(建立、遍历、线索化、最优二叉树)
6
图及其应用实验
图的两种基本存储结构,及各种操作的算法实现(建立、遍历、图的典型应用)
7
查找和排序实验
各种基本的查找和排序算法及其实现分析
四、实验内容安排:
实验一抽象数据类型的表示与实现
(验证性实验2学时)
1.目的要求:
1)熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现;
2)理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组)。
3)认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行结果,并结合程序进行分析。
2.实验内容:
1)编程实现抽象数据类型三元组的定义、存储、基本操作(最大值、最小值、平均值等的求解),并设计一个主菜单完成各个功能的调用。
Main.cpp
#include"
opretation.h"
stdio.h"
voidmain()
{
TripletT;
init(T);
}
operation.h
#ifndefxxxx
#definexxxx
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
typedefElemType*Triplet;
StatusInitTriplet(Triplet&
T);
//构造并赋值
StatusDestroyTriplet(Triplet&
//销毁
StatusGet(TripletT,inti,ElemType&
e);
//返回第i的值
StatusPut(Triplet&
T,inti,ElemTypee);
//改变第i的值
StatusIsAscending(TripletT);
//若为升序,则返回1,否返回0
StatusIsDescending(TripletT);
//若为降序,则返回1,否返回0
StatusMax(TripletT,ElemType&
//返回最大值
StatusMin(TripletT,ElemType&
//返回最小值
Statusinit(TripletT);
#endif
Operatation.h
hanshu.h"
stdlib.h"
Statusinit(TripletT)
inti,e;
charchoice;
printf("
1.InitTriplet构造并赋值\n"
);
2.DestroyTriplet销毁\n"
3.Get返回第i的值\n"
4.Put改变第i的值\n"
5.IsAscending若为升序,则返回1,否返回0\n"
6.IsDescending若为降序,则返回1,否返回0\n"
7.Max返回最大值\n"
8.Min返回最小值\n"
请输入你所选择的功能的序号:
"
fflush(stdin);
scanf("
%c"
&
choice);
switch(choice)
{
case'
1'
:
InitTriplet(T);
break;
2'
DestroyTriplet(T);
break;
case'
3'
printf("
请输入您想显示的数的位数:
"
%d"
i);
Get(T,i,e);
4'
请输入您想改变的数的位数:
请输入您想改成的整数:
scanf("
Put(T,i,e);
5'
IsAscending(T);
6'
IsDescending(T);
7'
Max(T,e);
8'
Min(T,e);
default:
请重新选择:
//选择序号输入错误时,提示重新选择
}
return0;
T)//构造并赋值
intv1,v2,v3;
请输入三个整数:
%d%d%d"
v1,&
v2,&
v3);
T=((ElemType*)malloc(3*sizeof(ElemType)));
//分配3个元素的储存空间
if(!
T)exit(OVERFLOW);
//分配空间失败
T[0]=v1;
T[1]=v2;
T[2]=v3;
getchar();
system("
CLS"
//清屏
returnOK;
T)//销毁
free(T);
T=NULL;
e)//返回第i的值
if(i<
1||i>
3)
returnERROR;
e=T[i-1];
当前位的数值为:
e);
T,inti,ElemTypee)//改变第i的值
当位目前的数值为:
%d\n"
T[i-1]);
T[i-1]=e;
修改后的结果为:
StatusIsAscending(TripletT)//若为升序,则返回1,否返回0
{
intx;
若为升序,则显示1,否则显示0\n"
x=(T[0]<
=T[1])&
&
(T[1]<
=T[2]);
x);
StatusIsDescending(TripletT)//若为降序,则返回1,否返回0
若为降序,则显示1,否则显示0\n"
x=(T[0]>
(T[1]>
e)//返回最大值
e=(T[0]>
=T[1]?
((T[0]>
=T[2]?
T[0]:
T[2])):
(T[1]>
T[1]:
T[2]));
最大值为:
returnOK;
e)//返回最小值
e=(T[0]<
((T[0]<
(T[1]<
最小值为:
3.主要仪器设备及药品
2)PC机
3)TurboC2.0或VisualC++
实验二线性表实验
(验证性实验4学时)
1)熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现;
2)以线性表的各种操作(建立、插入、删除等)的实现为重点;
3)通过本次实习帮助学生加深对高级语言C语言的使用(特别是函数参数、指针类型、链表的使用)。
4)认真阅读和掌握本实验的参考程序,上机运行本程序,保存和打印出程序的运行结果,并结合程序进行分析。
按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。
3.实验内容:
1)编程实现线性表两种存储结构中的基本操作的实现(线性表的创建、插入、删除和查找),并设计一个主菜单完成各个功能的调用。
顺序存储:
main.cpp
#include<
stdio.h>
#include"
SqlistL;
1.Initlist创建\n"
2.ListInsert插入\n"
3.ListDelete删除\n"
4.Serch查找\n"
5.exit结束\n"
while
(1)
\n"
x);
switch(x)
{
case1:
Initlist(L);
////创建
break;
case2:
printf("
请输入您想插入的数字e="
scanf("
ListInsert(L,e);
//插入
break;
case3:
ListDelete(L,e);
//删除
case4:
Serch(L,e);
//查找
case5:
exit(OVERFLOW);
//结束
default:
}
}
#definelistinitsize100
#definelistincrement10
typedefstruct
ElemType*elem;
intlength;
intlistsize;
}Sqlist;
StatusInitlist(Sqlist&
L);
//创建
StatusListInsert(Sqlist&
L,ElemTypee);
//插入
StatusListDelete(Sqlist&
L,ElemType&
StatusSerch(SqlistL,ElemType&
Opretation.h
init.h"
L)//创建
inti;
L.elem=(ElemType*)malloc(listinitsize*sizeof(ElemType));
L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=listinitsize;
L.elem[0]=1;
L.elem[1]=2;
L.elem[2]=3;
L.elem[3]=4;
L.elem[4]=5;
已存数据为:
for(i=0;
i<
=4;
i++)
%d"
L.elem[i]);
L.length=5;
L,ElemTypee)//插入
ElemType*newbase;
ElemType*p,*q;
inti,j;
请输入您想插入的位置i="
L.length+1)
if(L.length>
=L.listsize)
newbase=(ElemType*)realloc(L.elem,(L.listsize+listincrement)*sizeof(ElemType));
if(!
newbase)
L.elem=newbase;
L.listsize+=listincrement;
q=&
(L.elem[i-1]);
for(p=&
(L.elem[L.length-1]);
p>
=q;
--p)
*(p+1)=*p;
*q=e;
++L.length;
//printf("
%d\n"
L.length);
for(j=0;
j<
L.length;
j++)
L.elem[j]);
e)//删除
请输入您想删除的位置i="
if((i<
1)||(i>
L.length))
p=&
e=*p;
删除的数为%d\n"
q=L.elem+L.length-1;
for(++p;
p<
++p)
*(p-1)=*p;
--L.length;
%d\n"
e)//查找
请输入您想查找的位置i="
e=L.elem[i-1];
查找结果e=%d\n"
链式存储:
Main.cpp
#include<
LinkListL;
inti,e,n;
intchoi;
主菜单:
1.Create构造并赋值\n"
2.Insert插入\n"
3.Delete删除\n"
4.Serch查找\n"
5.Put显示所有数据\n"
6.exit退出系统\n"
请输入您选择的功能"
choi);
switch(choi)
case1:
输入要写入的元素个数:
n);
GreateList_L(L,n);
请输入要插入的位置:
请输入要插入的数:
ListInsert_L(L,i,e);
n++;
//插入增加一个
请输入要删除的位置\n"
ListDelete_L(L,i,e);
n--;
//删除减少一个
请输入你想查询的数的位置\n"
GetElem_L(L,i,e);
case5:
所有数据为:
\n"
Put_L(L,n);
case6:
exit(ERROR);
default:
/}
Opretation.cpp
StatusGreateList_L(LinkList&
L,intn)//创建
LinkListp,q;
L=(LinkList)malloc(sizeof(LNode));
p=L;
请输入您想输入的数值