数据结构实验报告.docx
- 文档编号:26238013
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:26
- 大小:21.57KB
数据结构实验报告.docx
《数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告.docx(26页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
目录
试验报告要求------------------------------------------------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<<"班级:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告