数据结构实验报告.docx

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

数据结构实验报告.docx

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

数据结构实验报告.docx

数据结构实验报告

 

目录

试验报告要求------------------------------------------------1

实验一:

单链表的操作------------------------------------2

实验二:

图的遍历操作------------------------------------10

实验三:

数据查找-------------------------------------------15

实验四:

排序------------------------------------------------16

实验报告要求:

实验报告应包括以下内容:

程序清单

实验结果

分析与讨论

实验报告应写明实验名称、班号、实验者姓名、学号、将实验报告整理装订好,按指导教师规定的时间上交。

基本实验方法

本实验环节要求学生能够顺利完成《数据库原理》、《数据结构》、《操作系统》、《面向对象程序设计》及门课程的实验操作

实验所用器件、设备的简单介绍

所有实验在586以上的微机上进行,运行环境为VFP、C语言、C++语言和windows、linux操作系统。

实验一单链表的操作

实验学时:

2学时

实验目的:

熟悉数据库在链式存储结构下各种算法的实现。

三、实验设备:

本实验在586以上的微机上进行,运行环境为TurboC语言。

四、样例:

(参看《实践性环节培训与考核基本要求》p2)

五、实验内容:

功能:

建立一个数据域存放的是字符串的单链表;

输入一个指定的字符串,插入到单链表的指定位置;

删除单链表中制定的字符串;

遍历单链表。

输入要求:

输入N个字符串(长度小于6),建立含有N个节点的单链表,要求输入的字符串不重复。

测试数据建立时:

N=5(red,green,yellow,blue,black)

插入时:

orange(在第五个节点之后插入)

删除时:

blue

六、单链表

(一)、实验目的

1、掌握用VisualC++6.0上机调试单链表的基本方法

2、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现

(二)、程序清单

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

typedefstruct{//通讯录结点类型

charnum[5];//编号

charname[9];//姓名

charsex[3];//性别

charphone[13];//电话

charaddr[31];//地址

}DataType;

typedefstructnode{//结点类型定义

DataTypedata;//结点数据域

structnode*next;//结点指针域

}ListNode;

typedefListNode*LinkList;

LinkListhead;

ListNode*p;

//函数说明

intmenu_select();

LinkListCreateList(void);

voidInsertNode(LinkListhead,ListNode*p);

ListNode*ListFind(LinkListhead);

voidDelNode(LinkListhead);

voidprintList(LinkListhead);

//主函数

voidmain()

{

for(;;){

switch(menu_select())

{

case1:

printf("**********************************\n");

printf("*通讯录链表的建立*\n");

printf("**********************************\n");

head=CreateList();

break

(三)、实验中出现的问题及解决的方法

单链表的存储结果把无序表整理成数据递增的单链表。

解决方法:

用交换指针的方法

实验二图的遍历操作

一、实验学时:

2学时

二、实验目的:

采用邻接矩阵存储方式的无向图的深度优先遍历和广度优先遍历算法的实现。

三、实验原理:

图的基本运算

四、实验设备:

本实验在586以上的微机上进行,运行环境为TurboC.

五、实验内容:

功能:

建立一个顶点信息是字符的无向图;

输出深度优先遍历的结果;

输出广度优先遍历的结果;

输入要求:

先输入顶点数和边数,然后输入顶点信息以及每条边对应的两个顶点的序号。

测试数据:

8

ABCDEF

1

03

12

14

23

34

45

45

六、选做内容:

编写一个路径遍历算法,求出从北京到哈尔滨途中不经过郑州的所有简单路径,测试数据为教科书中图7.33,起点为北京。

实验二、图的遍历操作

(一)、实验目的

熟练掌握树的基本操作和实现。

(二)、程序清单

#include

#include

#include

#include

#include

#defineMAX_VERTEX_NUM20//图的最大顶点数

#defineMAXQSIZE30//队列的最大容量

enumBOOL{False,True};

typedefstructArcNode

{intadjvex;//该弧所指向的顶点的位置

structArcNode*nextarc;//指向下一条弧的指针

}ArcNode;//弧结点

typedefstruct

{ArcNode*AdjList[MAX_VERTEX_NUM];//指向第一条依附该顶点的弧的指针

intvexnum,arcnum;//图的当前顶点和弧数

}Graph;

typedefstruct//队列结构

{intelem[MAXQSIZE];//数据域

intfront;//队头指针

intrear;//队尾指针

}SqQueue;

BOOLvisited[MAX_VERTEX_NUM];//全局变量——访问标志数组

voidCreateGraph(Graph&);//生成图的邻接表

voidDFSTraverse(Graph);//深度优先搜索遍历图

voidDFS(Graph,int);

voidBFSTraverse(Graph);//广度优先搜索遍历图

voidInitial(SqQueue&);//初始化一个队列

BOOLQueueEmpty(SqQueue);//判断队列是否空

BOOLEnQueue(SqQueue&,int);//将一个元素入队列

BOOLDeQueue(SqQueue&,int&);//将一个元素出队列

intFirstAdjVex(Graph,int);//求图中某一顶点的第一个邻接顶点

intNextAdjVex(Graph,int,int);//求某一顶点的下一个邻接顶点

voidmain()

{GraphG;//采用邻接表结构的图

charj='y';

实验三数据查找

一、实验学时:

2学时

二、实验目的:

掌握在线性表上进行顺序查找、二分查找的算法实现以及在二叉排序树上的查找算法的实现。

三、实验原理:

数据查找的方式。

四、实验设备:

本实验在586以上的微机上进行,运行环境为TurboC.

五、实验内容:

功能:

随机输入若干整数建立一个线性表,查找指定节点的位置;

按升序输入若干整数建立一个有序表查找指定节点的位置;

随机输入若干整数建立一个二叉排序树,查找指定节点的位置;

输入要求:

先输入表中结点的个数N,然后输入N整数。

测试数据:

(略)

六、数据查找

(一)、实验目的

1、学会使用企业管理器查询数据

2、掌握使用SQL语句查询数据

(二)、程序清单

include

#include

#include

#defineN20//N为学生总人数

#defineMAXSIZE100//建立哈希表的元素个数最大可能值

floathashlist[MAXSIZE];//哈希表

inthashlist_length;//哈希表长度

structstu{//定义学生成绩表的结构体。

intnum;

charname[8];

charbj[5];

charsex[4];

floatchinese;

floatmaths;

floatenglish;

floatscore;

}a[N];

//********************建立数据表(数组a和长度n)**********************(正确运行)

voidCreatelist()

{

/*数据表自己输入

cout<<"请输入"<

for(inti=0;i

{

cout<<"请输入第"<

"<

cin>>a[i].num;

cin>>a[i].name;

cin>>a[i].bj;

cin>>a[i].chinese;

cin>>a[i].maths;

cin>>a[i].english;

a[i].score=a[i].chinese+a[i].maths+a[i].english;

}

*/

cout<<"请输入"<

for(inti=0;i

{

cout<<"请输入第"<

"<

a[i].num=i+1;

cin>>a[i].name;

cin>>a[i].bj;

//strcpy(a[i].name,"ydh");

//strcpy(a[i].bj,"1094");

a[i].chinese=float(rand()%100);

a[i].maths=float(rand()%100);

a[i].english=float(rand()%100);

a[i].score=a[i].chinese+a[i].maths+a[i].english;

}

}

//******************************************************************

//********************输出数据表(数组a和长度n)**********************(正确运行)

voidPrintlist(structstuarray[])

{

cout<<"\t学号\t姓名\t班级\t语文\t数学\t英语\t总分"<

for(inti=0;i

{

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

}

}

//******************************************************************

//************************1.顺序查找(学号)**************************(正确运行)

voidsearch1()

{

intsearchxh;

cout<<"请输入要查找的学号:

";

cin>>searchxh;

while(searchxh>N)

{

cout<<"输入错误,请重新输入!

"<

cin>>searchxh;

}

for(inti=0;i

if(a[i].num==searchxh)break;

if(i

{

cout<<"查找成功,学生的信息:

"<

cout<<"学号:

"<

cout<<"姓名:

"<

cout<<"班级:

"<

cout<<"语文:

"<

cout<<"数学:

"<

cout<<"英语:

"<

cout<<"总分:

"<

}

else

cout<<"没有要查找的数据!

";

}

//******************************************************************

//************************2.二分查找(总分)************************(正确运行)

voidsearch2()

{

structstub[N];

inti,j,k,flag=0;

intlow,mid,high;

floatsearchscore;

for(k=0;k

b[k]=a[k];

for(i=1;i

for(j=0;j

{

if(b[j].score>b[j+1].score)

{

structstutemp;

temp=b[j];

b[j]=b[j+1];

b[j+1]=temp;

}

}

cout<<"请输入要查找的总分:

";

cin>>searchscore;

low=0;

high=N-1;

while(low<=high&&flag==0){

mid=(low+high)/2;

if(searchscore==b[mid].score)

{

flag=1;

cout<<"查找成功,学生的信息:

"<

cout<<"学号:

"<

cout<<"姓名:

"<

cout<<"班级:

"<

cout<<"语文:

"<

cout<<"数学:

"<

cout<<"英语:

"<

cout<<"总分:

"<

}

elseif(searchscore>b[mid].score)

low=mid+1;

else

high=mid-1;

}

if(flag==0)cout<<"没有要查找的数据!

";

}

//******************************************************************

//*************************3.索引查找*******************************(正确运行)

voidsearch3()

{

charsearchbj[5];

floatsearchscore;

inti=0,j=0;

//建立索引表indexlist

structindexitem{

charindex[5];

intstart;

intlength;

};

structindexitemindexlist[4];

strcpy(indexlist[0].index,"1091");//设置索引表index值

strcpy(indexlist[1].index,"1092");

strcpy(indexlist[2].index,"1093");

strcpy(indexlist[3].index,"1094");

intflag1=1,flag2=1,flag3=1;

while(i<=N){//设置索引表start值

if(strcmp(a[i].bj,"1091")==0&&flag1==1)

{

indexlist[0].start=i;

flag1=0;

}

if(strcmp(a[i].bj,"1092")==0&&flag2==1)

{

indexlist[1].start=i;

flag2=0;

}

if(strcmp(a[i].bj,"1093")==0&&flag3==1)

{

indexlist[2].start=i;

flag3=0;

}

if(strcmp(a[i].bj,"1094")==0)

{

indexlist[3].start=i;

break;

}

i++;

}

i=0;

indexlist[0].length=indexlist[1].length=indexlist[2].length=indexlist[3].length=0;

while(i<=N){//设置索引表length值

if(strcmp(a[i].bj,"1091")==0)

{

indexlist[0].length++;

}

if(strcmp(a[i].bj,"1092")==0)

{

indexlist[1].length++;

}

if(strcmp(a[i].bj,"1093")==0)

{

indexlist[2].length++;

}

if(strcmp(a[i].bj,"1094")==0)

{

indexlist[3].length++;

}

i++;

}

cout<<"索引表(indexlist)已建立!

"<

cout<<"\tindex\tstart\tlength"<

for(i=0;i<4;i++)

{

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

}

cout<<"请输入要搜索的班级(1091~1094):

";

cin>>searchbj;

cout<

cout<<"请输入要搜索的总分:

";

cin>>searchscore;

intflag=1;

for(i=0;i

{

if(strcmp(searchbj,indexlist[i].index)==0)

{

j=indexlist[i].start;

while(j

if(searchscore==a[j].score)

{

flag=0;

break;

}

j++;

}

}

if(flag==0)break;

}

if(flag==1)

cout<<"没有要查找的数据!

"<

else

{

cout<<"查找成功,学生的信息:

"<

cout<<"学号:

"<

cout<<"姓名:

"<

cout<<"班级:

"<

cout<<"语文:

"<

cout<<"数学:

"<

cout<<"英语:

"<

cout<<"总分:

"<

}

flag=0;//还原标志变量使程序可以多次查找

}

//******************************************************************

//*************************4.散列查找*******************************(正确运行)

intCreate_hashlist()//建立哈希表

{

intadd,newadd,di;

if(N+N/10+1>MAXSIZE)//确保hashlist表长比N大于10%以上

{

return0;

}

hashlist_length=N+N/10;//确定hashlist数组的长度为hashlist_length(即:

N的110%)

for(inti=0;i

for(i=0;i

{

add=int(a[i].score)/15;//哈希函数H(K)=K%m;

newadd=add;

di=1;//增量di

while(hashlist[newadd]){

newadd=(add+di)%hashlist_length;//New_addr=(addr+di)%m(m为hashlist的长度,di=1,2,3,4,5…)

di++;

}

hashlist[newadd]=a[i].score;

}

return1;

}//哈希表成功建立!

intfind(floatsearchscore)//查找searchscore

{

intadd,newadd,di;

add=int(searchscore)/15;//哈希函数H(K)

newadd=add;

di=1;

while((hashlist[newadd]!

=searchscore)&&(hashlist[newadd

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

当前位置:首页 > 高等教育 > 艺术

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

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