数据结构实验报告册.docx

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

数据结构实验报告册.docx

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

数据结构实验报告册.docx

数据结构实验报告册

 

四川师范大学计算机学院

实验报告册

 

院系名称:

计算机科学学院

课程名称:

数据结构

实验学期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

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

当前位置:首页 > 初中教育 > 英语

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

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