数据结构实验报告册.docx
《数据结构实验报告册.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告册.docx(84页珍藏版)》请在冰豆网上搜索。
数据结构实验报告册
四川师范大学计算机学院
实验报告册
院系名称:
计算机科学学院
课程名称:
数据结构
实验学期2013年至2014年第一学期
专业班级:
2012级4班软件工程
姓名:
张勇学号:
2012110457
指导教师:
廖雪花
实验最终成绩:
实验报告须知
1.学生填写实验报告应按规范填写,填写格式见由任课老师给出的实验报告样本;
2.学生应填写的内容包括:
封面相关栏目、第一页中‘本学期(年)开设实验课程情况一览表’中的实验名称、学时数;每次报告中的实验性质、同组人姓名、实验日期、以及实验报告中的一至五项;
3.教师填写内容为:
实验评价、每次报告成绩、第一页中‘本学期(年)开设实验课程情况一览表’中成绩、及封面的实验最终成绩;
4.学生实验结束后,教师应对学生实验结果进行核实,学生方可离开实验室。
5、实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。
6.本实验册应妥善保管,本课程实验结束后应交回实验室。
本学期(年)开设实验课程情况一览表
序号
实验名称
(学生实验后填写)
学时数
成绩
(分数或等级)
1
抽象数据类型的表示与实现
2
线性表实验
3
栈和队列实验
4
稀疏矩阵实验
5
树和二叉树实验
6
图及其应用实验
7
查找和排序实验
8
9
10
11
12
13
14
15
16
17
18
19
20
实验报告
(1)
实验名称
抽象数据类型的表示与实现
同组人姓名
张勇
实验性质
□基本操作□验证性
■综合性□设计性
实验日期
8月30日
实验成绩
教师评价:
实验预习□实验操作□实验结果□实验报告□其它□
教师签名:
一、实验目的及要求
1)熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现;
2)理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组)。
3)认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行结果,并结合程序进行分析。
二、实验内容
1)编程实现抽象数据类型三元组的定义、存储、基本操作(最大值、最小值、平均值等的求解),并设计一个主菜单完成各个功能的调用。
三、主要设备及软件
PC机1台,VC6.0平台
4、实验流程、操作步骤或核心代码、算法片段
说明:
这个实验的代码全部写到一个CPP文件中的
#include
#include
usingnamespacestd;
#defineTURE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
typedefElemType*Triplet;
StatusInitTriplet(Triplet&T,ElemTypev1,ElemTypev2,ElemTypev3)
{
T=(ElemType*)malloc(3*sizeof(ElemType));
if(!
T)
exit(OVERFLOW);
T[0]=v1;
T[1]=v2;
T[2]=v3;
returnOK;
}
StatusDestroyTriplet(Triplet&T)
{
free(T);
T=NULL;
returnOK;
}
StatusGet(TripletT,inti,ElemType&e)
{
if(i<1||i>3)
returnERROR;
e=T[i-1];
returnOK;
}
StatusPut(Triplet&T,inti,ElemTypee)
{
if(i<1||i>3)
returnERROR;
T[i-1]=e;
returnOK;
}
StatusIsAscending(TripletT)
{
if((T[0]return1;
else
return0;
}
StatusIsDescending(TripletT)
{
if((T[0]>T[1])||(T[1]>T[2]))
return1;
else
return0;
}
StatusMax(TripletT,ElemType&e)
{
if(T[0]>=T[1])
{
if(T[0]>=T[2])
e=T[0];
else
e=T[2];
}
elseif(T[1]>=T[2])
e=T[1];
else
e=T[2];
returnOK;
}
StatusMin(TripletT,ElemType&e)
{
if(T[0]<=T[1])
{
if(T[0]<=T[2])
e=T[0];
else
e=T[2];
}
elseif(T[1]<=T[2])
e=T[1];
else
e=T[2];
returnOK;
}
intSelect(Triplet&T)
{
intoption;
inti;
ElemTypee;
cout<<""<cout<<"1.销毁三元组"<cout<<"2.查找元素"<cout<<"3.改变元素"<cout<<"4.判断是否升序排列"<cout<<"5.判断是否降序排列"<cout<<"6.显示最大值"<cout<<"7.显示最小值"<cout<<"8.安全退出"<cout<<""<cout<<"请输入选项:
";
cin>>option;
switch(option)
{
case1:
DestroyTriplet(T);
break;
case2:
cout<<"需要显示第几个数的值:
";
cin>>i;
Get(T,i,e);
cout<<"第"<
break;
case3:
cout<<"你要改变第几个数的值:
";
cin>>i;
cout<<"你需要将第"<
";
cin>>e;
Put(T,i,e);
break;
case4:
if(IsAscending(T)==1)
cout<<"该三元组为升序排列."<else
cout<<"该三元组不是升序排列."<break;
case5:
if(IsDescending(T)==1)
cout<<"该三元组为降序排列."<else
cout<<"该三元组不是降序排列."<break;
case6:
Max(T,e);
cout<<"最大值为"<break;
case7:
Min(T,e);
cout<<"最小值为"<break;
case8:
exit(0);
default:
cout<<"输入的选项有误,请重新输入."<break;
}
getchar();
getchar();
system("cls");
returnSelect(T);
}
intmain()
{
TripletT;
intv1,v2,v3;
cout<<"请输入三个数建立三元组:
";
cin>>v1>>v2>>v3;
system("cls");
InitTriplet(T,v1,v2,v3);
Select(T);
return0;
}
五、实验结果的分析与评价
这个实验让我第一次接触到了抽象数据类型,感觉十分震撼,学到了很多。
实验报告
(2)
实验名称
线性表实验
同组人姓名
张勇
实验性质
□基本操作□验证性
■综合性□设计性
实验日期
8月30日
实验成绩
教师评价:
实验预习□实验操作□实验结果□实验报告□其它□
教师签名:
一、实验目的及要求
1)熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现;
2)以线性表的各种操作(建立、插入、删除等)的实现为重点;
3)通过本次实习帮助学生加深对高级语言C语言的使用(特别是函数参数、指针类型、链表的使用)。
2)认真阅读和掌握本实验的参考程序,上机运行本程序,保存和打印出程序的运行结果,并结合程序进行分析。
按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。
2、实验内容
1)编程实现线性表两种存储结构中的基本操作的实现(线性表的创建、插入、删除和查找),并设计一个主菜单完成各个功能的调用。
三、主要设备及软件
PC机1台,VC6.0平台
四、实验流程、操作步骤或核心代码、算法片段
//////////////////////////declar.h/////////////////////////////////////////////
#ifndefABC_D
#defineABC_D
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefintElemType;
typedefintStatus;
typedefstruct
{
ElemType*elem;
intlength;
intlistsize;
}SqList;
staticStatusInitList(SqList&L);
staticStatusDestroyList(SqList&L);
staticStatusClearList(SqList&L);
staticStatusListEmpty(SqListL);
staticStatusListLength(SqListL);
staticStatusGetElem(SqListL,ElemTypei,ElemType&e);
//StatusLocateElem(SqListL,ElemTypee,compare());
staticStatusPriorElem(SqListL,ElemTypecur_e,ElemType&pre_e);
staticStatusNextElem(SqListL,ElemTypecur_e,ElemType&next_e);
staticStatusListInsert(SqList&L,ElemTypei,ElemTypee);
staticStatusListDelete(SqList&L,ElemTypei,ElemType&e);
//StatusListTraverse(SqListL,visit())
#endif
///////////////////////////////////function.cpp//////////////////////////////
#include"declar.h"
#include
#include
#include
usingnamespacestd;
staticintoption;
staticElemTypei,e;
staticElemTypecur_e,pre_e,next_e;
staticSqListL;
StatusInitList(SqList&L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
returnOK;
}
StatusDestroyList(SqList&L)
{
if(!
L.elem)exit(OVERFLOW);
free(L.elem);
L.length=L.listsize=0;
returnOK;
}
StatusClearList(SqList&L)
{
if(!
L.elem)exit(OVERFLOW);
L.length=0;
returnOK;
}
StatusListEmpty(SqListL)
{
if(!
L.elem)exit(OVERFLOW);
if(L.length==0)
returnTRUE;
else
returnFALSE;
}
StatusListLength(SqListL)
{
if(!
L.elem)exit(OVERFLOW);
returnL.length;
}
StatusGetElem(SqListL,ElemTypei,ElemType&e)
{
if(!
L.elem)exit(OVERFLOW);
if((i<1)||(i>L.length))
returnERROR;
e=L.elem[i-1];
returnOK;
}
/*StatusLocateElem(SqListL,ElemTypee,compare())
{
}*/
StatusPriorElem(SqListL,ElemTypecur_e,ElemType&pre_e)
{
if(!
L.elem)exit(OVERFLOW);
for(intix=1;ix{
if(cur_e==L.elem[ix])
{
pre_e=L.elem[ix-1];
returnOK;
}
}
returnFALSE;
}
StatusNextElem(SqListL,ElemTypecur_e,ElemType&next_e)
{
if(!
L.elem)exit(OVERFLOW);
for(intix=0;ix{
if(cur_e==L.elem[ix])
{
next_e=L.elem[ix+1];
returnOK;
}
}
returnFALSE;
}
StatusListInsert(SqList&L,ElemTypei,ElemTypee)
{
if(!
L.elem)exit(OVERFLOW);
if((i<1)||(i>L.length+1))
returnERROR;
if(L.length>=L.listsize)
{
ElemType*newbase;
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
for(intix=L.length+1;ix>i;--i)
{
L.elem[ix]=L.elem[ix-1];
}
L.elem[i]=e;
++L.length;
returnOK;
}
StatusListDelete(SqList&L,ElemTypei,ElemType&e)
{
if(!
L.elem)exit(OVERFLOW);
if((i<0)||(i>L.length))
returnERROR;
e=L.elem[i-1];
for(intix=i-1;ix{
L.elem[ix]=L.elem[ix+1];
}
--L.length;
returnOK;
}
staticintInterface()
{
cout<<"╔══╦═════════════════════════╦══╗"<cout<<"║║线性表║║"<cout<<"╠══╩═════════════════════════╩══╣"<cout<<"║║"<cout<<"║0.建立线性表║"<cout<<"║1.销毁线性表║"<cout<<"║2.将线性表置空║"<cout<<"║3.判断线性表是否为空║"<cout<<"║4.查找制定位置元素的值║"<cout<<"║pare判定线性表║"<cout<<"║6.查找输入数据的前驱║"<cout<<"║7.查找输入数据的后继║"<cout<<"║8.指定位置插入数据元素║"<cout<<"║9.制定位置删除数据元素║"<cout<<"║10.visit判定线性表║"<cout<<"║11.安全退出程序║"<cout<<"║║"<cout<<"╚═══════════════════════════════╝"<cout<<"请输入你的选项:
";
returnOK;
}
staticintOptionMenu()
{
Interface();
cin>>option;
if(option=0)
{
InitList(L);
}
switch(option)
{
case1:
DestroyList(L);
break;
case2:
ClearList(L);
break;
case3:
ListEmpty(L);
break;
case4:
cout<<"你需要查找第几个数据:
";
cin>>i;
GetElem(L,i,e);
cout<<"第"<
"<case5:
case6:
cout<<"请输入数据:
";
cin>>cur_e;
PriorElem(L,cur_e,pre_e);
cout<"<break;
case7:
cout<<"请输入数据:
";
cin>>cur_e;
NextElem(L,cur_e,next_e);
cout<"<break;
case8:
cout<<"请输入你要插入数据的位置:
";
cin>>i;
cout<<"请输入你要插入数据的值:
";
cin>>e;
if(ListInsert(L,i,e)==OK)
cout<<"插入数据元素成功!
"<cout<<"按回车键返回.";
break;
case9:
cout<<"请输入你要删除数据的位置:
";
cin>>i;
if(ListDelete(L,i,e)==OK)
cout<<"已经将"<
"<cout<<"按回车键返回.";
break;
case10:
;
}
getchar();
system("cls");
returnOptionMenu();
}
///////////////////////////////////////////the_main.cpp///////////////////////////////////////////
#include"function.cpp"
intmain()
{
OptionMenu();
return0;
}
五、实验结果的分析与评价
实验报告(3)
实验名称
抽象数据类型的表示与实现
同组人姓名
栈、队列实验
实验性质
□基本操作□验证性
■综合性□设计性
实验日期
8月30日
实验成绩
教师评价:
实验预习□实验操作□实验结果□实验报告□其它□
教师签名:
一、实验目的及要求
1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们。
2)本实验训练的要点是“栈”和“队列”的观点;
二、实验内容
1)利用栈,实现任一个表达式中的语法检查(如括号的匹配)。
2)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);
三、主要设备及软件
PC机1台,VC