数据结构实验报告完整版.docx

上传人:b****1 文档编号:28594303 上传时间:2023-07-19 格式:DOCX 页数:69 大小:187.68KB
下载 相关 举报
数据结构实验报告完整版.docx_第1页
第1页 / 共69页
数据结构实验报告完整版.docx_第2页
第2页 / 共69页
数据结构实验报告完整版.docx_第3页
第3页 / 共69页
数据结构实验报告完整版.docx_第4页
第4页 / 共69页
数据结构实验报告完整版.docx_第5页
第5页 / 共69页
点击查看更多>>
下载资源
资源描述

数据结构实验报告完整版.docx

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

数据结构实验报告完整版.docx

数据结构实验报告完整版

四川师范大学计算机学院

实验报告册

院系名称:

计算机科学学院

课程名称:

数据结构

实验学期2010年至2011年第一学期

专业班级:

2010级教育技术学

姓名:

学号:

指导教师:

实验最终成绩:

实验报告须知

1.学生填写实验报告应按规范填写,填写格式见由任课老师给出的实验报告样本;

2.学生应填写的内容包括:

封面相关栏目、第一页中‘本学期(年)开设实验课程情况一览表’中的实验名称、学时数;每次报告中的实验性质、同组人姓名、实验日期、以及实验报告中的一至五项;

3.教师填写内容为:

实验评价、每次报告成绩、第一页中‘本学期(年)开设实验课程情况一览表’中成绩、及封面的实验最终成绩;

4.学生实验结束后,教师应对学生实验结果进行核实,学生方可离开实验室。

5、实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。

6.本实验册应妥善保管,本课程实验结束后应交回实验室。

本学期(年)开设实验课程情况一览表

序号

实验名称

(学生实验后填写)

学时数

成绩

(分数或等级)

1

抽象数据类型的表示与实现

2学时

2

线性表实验

4学时

3

栈和队列实验

6学时

4

稀疏矩阵实验

4学时

5

树和二叉树实验

6学时

6

图及其应用实验

6学时

7

查找和排序实验

4学时

8

9

10

11

12

13

14

15

16

17

18

19

20

实验报告

(1)

实验名称

抽象数据类型的表示与实现

同组人姓名

实验性质

□基本操作■验证性

■综合性□设计性

实验日期

2011年9月

30日

实验成绩

教师评价:

实验预习□实验操作□实验结果□实验报告□其它□

教师签名:

一、实验目的及要求

1)熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现;

2)理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组)。

3)认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行结果,并结合程序进行分析。

二、实验内容

1)编程实现抽象数据类型三元组的定义、存储、基本操作(最大值、最小值、平均值等的求解),并设计一个主菜单完成各个功能的调用。

三、主要设备及软件

1)PC机

2)TurboC2.0或VisualC++

四、实验流程、操作步骤或核心代码、算法片段

(一)头文件(H1.h)

#ifndefH1_H

#defineH1_H

#defineOK1

#defineERROR0

#defineOVERFLOW-2

typedefintStatus;

typedefintElemType;

typedefElemType*Triplet;

//函数声明

externStatusInitTriplet(Triplet&T,ElemTypev1,ElemTypev2,ElemTypev3);

externStatusDestroyTriplet(Triplet&T);

externStatusGet(TripletT,inti,ElemType&e);

externStatusPut(Triplet&T,inti,ElemTypee);

externStatusMax(TripletT,ElemType&e);

externStatusMin(TripletT,ElemType&e);

externStatusAverage(TripletT,ElemType&e);

#endif

(二)功能函数(function.cpp)

#include

#include"h1.h"

StatusInitTriplet(Triplet&T,ElemTypev1,ElemTypev2,ElemTypev3)

{

T=(ElemType*)malloc(3*sizeof(ElemType));

if(!

T)

returnOVERFLOW;

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;

}

StatusMax(TripletT,ElemType&e)

{

e=(T[0]>=T[1])?

((T[0]>=T[2])?

T[0]:

T[2]):

((T[1]>=T[2])?

T[1]:

T[2]);

returnOK;

}

StatusMin(TripletT,ElemType&e)

{

e=(T[0]<=T[1])?

((T[0]<=T[2])?

T[0]:

T[2]):

((T[1]<=T[2])?

T[1]:

T[2]);

returnOK;

}

StatusAverage(TripletT,ElemType&e)

{

e=(T[0]+T[1]+T[2])/3;

returnOK;

}

(三)主函数(triplet.cpp)

#include

#include"h1.h"

voidmain()

{

Tripletp;

ElemTypee,v1,v2,v3;

inti;

intselect;

printf("输入三个数,建立一个三元组\n");

scanf("%d%d%d",&v1,&v2,&v3);

if(InitTriplet(p,v1,v2,v3)==OVERFLOW)

printf("分配失败,退出程序!

");

else

do

{

printf("1:

取三元组的最大值\n");

printf("2:

取三元组的最小值\n");

printf("3:

求三元组的平均值\n");

printf("0:

结束!

\n");

printf("请输入选择!

\n");

scanf("%d",&select);

switch(select)

{case1:

Max(p,e);

printf("最大值是:

%d\n",e);break;

case2:

Min(p,e);

printf("最小值是:

%d\n",e);break;

case3:

Average(p,e);

printf("平均值是:

%d\n",e);break;

case0:

printf("操作结束!

");break;

default:

printf("输入选择出错!

\n");

}//endofswitch

}while(select!

=0);//endofwhile

DestroyTriplet(p);

}//endofmain

五、实验结果的分析与评价

实验结果:

分析:

(1)类C语言面对对象,而C语言面对过程;

(2)核心算法就相当于C语言的程序;

(3)初步了解三元组的建立等知识;

(4)初步了解利用C++编程的步骤及编程的组成部分;

(5)初次接触还是对很多地方倍感疑惑,需要多多操作理解;

实验报告

(2)

实验名称

线性表实验:

顺序存储、链式存储

同组人姓名

实验性质

□基本操作■验证性

■综合性□设计性

实验日期

2010年10月9日

实验成绩

教师评价:

实验预习□实验操作□实验结果□实验报告□其它□

教师签名:

一、实验目的及要求

1)熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现;

2)以线性表的各种操作(建立、插入、删除等)的实现为重点;

3)通过本次实习帮助学生加深对高级语言C语言的使用(特别是函数参数、指针类型、链表的使用)。

认真阅读和掌握本实验的参考程序,上机运行本程序,保存和打印出程序的运行结果,并结合程序进行分析。

按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果

二、实验内容

1)编程实现线性表两种存储结构中的基本操作的实现(线性表的创建、插入、删除和查找),并设计一个主菜单完成各个功能的调用。

三、主要设备及软件

1)PC机

2)TurboC2.0或VisualC++ 

四、实验流程、操作步骤或核心代码、算法片段

1.顺序存储的程序:

(一)头文件(H1.h)

#ifndefH1_H

#defineH1_H

#defineLIST_INIT_SIZE100//线形表存储空间的初始分配量

#defineLISTINCREMENT10//线形表存储空间的分配增量

#defineOVERFLOW-2

#defineOK1

#defineERROR0

typedefintElemType;

typedefintStatus;

typedefstruct{

ElemType*elem;//存储空间基址

intlength;//当前长度

intlistsize;//当前分配的存储容量

}SqList;//函数声明

externStatusInitList_Sq(SqList&L,intn);

externStatusListInsert_Sq(SqList&L,inti,ElemTypee);

externStatusListDelete_Sq(SqList&L,inti,ElemType&e);

externStatusLocateElem_Sq(SqListL,ElemTypee);

externStatusDestrory_Sq(SqList&L);

#endif

(二)功能函数(function.cpp)

#include"stdlib.h"

#include"h1.h"

#include"stdio.h"

StatusInitList_Sq(SqList&L,intn)

{

inti;

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!

L.elem)

returnOVERFLOW;//存储分配失败

L.length=0;//空表长度为0

for(i=0;i

scanf("%d",&(L.elem[i]));

++L.length;

}

L.listsize=LIST_INIT_SIZE;//初始存储容量

returnOK;

}//Initlist_sq

StatusListInsert_Sq(SqList&L,inti,ElemTypee)

{

ElemType*newbase;

ElemType*p;

ElemType*q;

if(i<1||i>L.length+1)

returnERROR;//i值不合法

if(L.length>=L.listsize){//当前存储空间已满,增加分配

newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!

newbase)

returnOVERFLOW;//存储分配失败

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;//插入e

++L.length;//表长增1

returnOK;

}//ListInsert_sq

StatusListDelete_Sq(SqList&L,inti,ElemType&e)

{

ElemType*p;

ElemType*q;

if((i<1)||(i>L.length))

returnERROR;//i值不合法

p=&(L.elem[i-1]);//p为被删除元素的位置

e=*p;//被删除元素的值赋给e

q=L.elem+L.length-1;//表尾元素的位置

for(++p;p<=q;++p)

*(p-1)=*p;//被删除元素之后的元素左移

--L.length;//表长减1

returnOK;

}//ListDelete_sq

StatusLocateElem_Sq(SqListL,ElemTypee){

//在顺序表中查询第一个满足判定条件的数据元素,

//若存在,则返回它的位序,否则返回0

inti=1;//i的初值为第1元素的位序

ElemType*p=L.elem;//p的初值为第1元素的存储位置

while((i<=L.length)&&(*p++!

=e))

++i;

if(i<=L.length)

returni;

else

return0;

}//LocateElem_Sq

StatusDestrory_Sq(SqList&L)

{

returnOK;

}

(三)主函数(main.cpp)

#include

#include"h1.h"

voidmain()

{

SqListp;

inti,e,n;

intselect;

printf("请输入你将要建立的链表的大小n:

");

scanf("%d",&n);

printf("\n请输入%d个数值并用'空格符'分隔:

\n",n);

InitList_Sq(p,n);

printf("\n你建立的链表为:

\n");

for(i=0;i

printf("%3d",p.elem[i]);

/*if(InitList_Sq(p,n)==OVERFLOW)

printf("分配失败,退出程序!

");

else*/

do

{

printf("\n1:

在链表原来的基础上插入一个值\n");

printf("2:

删除链表中的一个值\n");

printf("3:

查找链表中的某一个值\n");

printf("0:

结束!

\n");

printf("请输入选择!

\n");

scanf("%d",&select);

switch(select)

{

case1:

printf("从键盘输入你插入的元素的位置i和插入元素的值e:

\n");

scanf("%d%d",&i,&e);

ListInsert_Sq(p,i,e);

printf("插入后所有的值是:

\n");

for(i=0;i

printf("%3d",p.elem[i]);

break;

case2:

printf("输入你删除的元素的位置i:

\n");

scanf("%d",&i);

ListDelete_Sq(p,i,e);

printf("删除后所有的值是:

\n");

for(i=0;i

printf("%3d",p.elem[i]);

break;

case3:

printf("输入查找的元素e:

\n");

scanf("%d",&e);

LocateElem_Sq(p,e);

printf("所查找值的位序是:

%d\n",LocateElem_Sq(p,e));

break;

case0:

printf("操作结束!

");

break;

default:

printf("输入选择出错!

\n");

}//endofswitch

}while(select!

=0);//endofwhile

Destrory_Sq(p);

}//endofmain

2.链式存储的程序:

(一)H1.h(头文件)

#ifndefH1_H

#defineH1_H

#defineERROR0

#defineOK1

#defineOVERFLOW-2

typedefintElemType;

typedefintStatus;

typedefstructLNode{

ElemTypedata;

structLNode*next;

}LNote,*LinkList;

externStatusCreateList_L(LinkList&L,intn);

externStatusGetElem_L(LinkListL,inti,ElemType&e);

externStatusListInsert_L(LinkList&L,inti,ElemTypee);

externStatusListDelete_L(LinkList&L,inti,ElemType&e);

externStatusDestroy_L(LinkList&L);

#endif

(二)功能函数(function.cpp)

#include"stdlib.h"

#include"h1.h"

#include"stdio.h"

StatusCreateList_L(LinkList&L,intn){

//逆位序输入n个元素的值,建立带表头结点的单链线性表。

inti;

structLNode*p;

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;//先建一个带头结点的单链表

for(i=n;i>0;--i){

p=(LinkList)malloc(sizeof(LNode));//生成结点

scanf("%d",&p->data);//输入元素

p->next=L->next;

L->next=p;//插入到表头

}

returnOK;

}//CreateList_L

StatusGetElem_L(LinkListL,inti,ElemType&e){

//L为带结点的单链表的头指针

//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR

LinkListp;

p=L->next;

intj=1;//初始化,p指向第一个结点,j为计数器

while(p&&j

p=p->next;

++j;

}

if(!

p||j>i)

returnERROR;//第i个元素不存在

e=p->data;

returnOK;

}//GetElem_L

StatusListInsert_L(LinkList&L,inti,ElemTypee){

//在带结点的单链线性表L中第i个位置之前插入元素e

structLNode*s;

structLNode*p;

p=L;

intj=0;

while(p&&j

p=p->next;++j;

}//寻找第i-1个结点

if(!

p||j>i-1)

returnERROR;//i小于1或者大于表长加1

s=(LinkList)malloc(sizeof(LNode));//生成新结点

s->data=e;s->next=p->next;//插入L中

p->next=s;

returnOK;

}//ListInsert_L

StatusListDelete_L(LinkList&L,inti,ElemType&e){

//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值

structLNode*p;

p=L;

structLNode*q;

intj=0;

while(p->next&&j<(i-1)){//寻找第i个结点,并令p指向其前驱

p=p->next;++j;

}

if(!

(p->next)||j>(i-1))

returnERROR;//删除位置不合理

q=p->next;p->next=q->next;//删除并释放结点

e=q->data;free(q);

returnOK;

}//ListDelete_L

Destroy_L(LinkList&L){

returnOK;

}

(三)主函数(main.cpp)

#include

#include"h1.h"

voidmain()

{

LinkListp,L,s;

ElemTypedata;

inti,n,e;

intselect;

printf("从键盘输入你建立的链表的数值个数n:

");

scanf("%d",&n);

pr

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

当前位置:首页 > PPT模板 > 中国风

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

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