数据结构实验报告.docx
- 文档编号:25444802
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:11
- 大小:17.95KB
数据结构实验报告.docx
《数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
数据结构实验报告
篇一:
数据结构实验报告范例
《数据结构与算法》实验报告
专业班级姓名学号
实验项目
实验一二叉树的应用
实验目的
1、进一步掌握指针变量的含义及应用。
2、掌握二叉树的结构特征,以及各种存储结构的特点及使用范围。
3、掌握用指针类型描述、访问和处理二叉树的运算。
实验内容
题目1:
编写一个程序,采用一棵二叉树表示一个家谱关系。
要求程序具有如下功能:
(1)用括号表示法输出家谱二叉树,
(2)查找某人的所有儿子,
(3)查找某人的所有祖先。
算法设计分析
(一)数据结构的定义
为了能够用二叉树表示配偶、子女、兄弟三种关系,特采用以下存储关系,则能在二叉树上实现家谱的各项运算。
二叉树型存储结构定义为:
typedefstructSNODE
{charname[MAX];//人名
structSNODE*left;//指向配偶结点
structSNODE*right;//指向兄弟或子女结点
}FNODE;
(二)总体设计
实验由主函数、家谱建立函数、家谱输出函数、儿子查找函数、祖先查找函数、结点定位函数、选择界面函数七个函数共同组成。
其功能描述如下:
(1)主函数:
统筹调用各个函数以实现相应功能
voidmain
(2)家谱建立函数:
与用户交互建立家族成员对应关系
voidInitialFamily//家谱建立函数
(3)家谱输出函数:
用括号表示法输出家谱
输出形式为:
父和母(子1和子妻1(孙1),子2和子妻2(孙2))
voidPrintFamily//家谱输出函数
(4)儿子查找函数:
在家谱中查找到某人所有的子女并输出,同时也能辨别出其是否为家族成员与是否有子女
voidFindSon//儿子查找函数
(5)祖先查找函数:
在家谱中查找到某人所有的祖先并输出,同时也能辨别出其是否为家族中成员。
intFindAncestor//祖先查找函数
(6)结点定位函数:
在家谱中找到用户输入人名所对应的结点。
FNODE*findnode//结点定位函数
(7)选择界面函数:
为便于编写程序,将用户选择部分独立为此函数。
voidPRINT
(三)各函数的详细设计:
voidInitialFamily//家谱建立函数
1:
首先建立当前人的信息,将其左右结点置为空,
2:
然后让用户确定其是否有配偶,如果没有配偶,则当前程序结束,
3:
如果有则建立其配偶信息,并将配偶结点赋给当前人的左结点;
4:
再让用户确定其是否有子女,如果有则递归调用家谱建立函数建立子女结点,并将其赋给配偶结点的下一个右结点。
5:
如无,则程序结束
voidPrintFamily//家谱输出函数
1:
首先判断当前结点是否为空,如果为空则结束程序;
2:
如果不为空,则输出当前结点信息,
3:
然后判断其左结点(配偶结点)是否为空,如不为空则输出“和配偶信息。
4:
再判断配偶结点的右结点是否为空,如不为空则递归调用输出其子女信息,最后输出“)”;
5:
当配偶结点为空时,则判断其右结点(兄弟结点)是否为空
6:
如果不为空,则输出“,”,并递归调用输出兄弟信息
7程序结束
FNODE*findnode//结点定位函数
1:
当前结点是否为空,为空则返回空;
2:
如果和查找信息相同,则返回当前结点;
3:
如不然,则先后递归访问其左结点,再不是则递归访问右结点
voidFindSon//儿子查找函数
1:
在家谱中定位到要查找的结点,如无则输出“查找不到此人”
2:
判断其配偶结点与子女结点是否为空,为空则输出“无子女”
3:
不为空则输出其配偶结点的所有右结点(子女结点)。
intFindAncestor//祖先查找函数
1:
先在家谱中定位到要查找的结点,如为空输出“不存在此人”,程序结束
2:
先将父母结点入栈,当栈为空时程序结束,
3:
栈不为空时,判断栈顶元素是否已访问过,
4:
访问过,再判断是否为查找结点,如是则输出栈中保存的其祖先结点,并滤过其兄弟结点不输出;不是查找结点,则退栈一个元素
5:
未访问过,则取当前栈顶元素,置访问标志——1,同时取其右结点
6:
栈不为空或当前所取结点不为空时,转到2;
实验测试结果及结果分析
(一)测试结果
(二)结果分析
(略)
实验总结
(略)
附录实验程序代码
/*程序定义部分:
*/
#include
#include
#include
#defineMAX20
typedefstructSNODE
{
charname[MAX];//人名
structSNODE*left;//指向配偶结点
structSNODE*right;//指向兄弟或子女结点
}FNODE;
/*家谱建立函数*/
voidInitialFamily
{
FNODE*s,*r,*q;
inttag;
q=malloc);
q=NULL;
s=malloc);
printf;
scanf;
s->left=s->right=NULL;
head=r=s;
printf;//建立配偶结点scanf;
if
{
s=malloc);
printf;
scanf;
s->left=s->right=NULL;
r->left=s;
r=s;
do{//递归调用建立孩子结点printf;
scanf;
if
{
InitialFamily;
r->right=q;
r=q;
}
}while;
}
}
/*家谱输出部分*/
voidPrintFamily
{
FNODE*s;
if
{
printf;//不为空时输出当前结点
if//输出配偶结点
{
s=head->left;
printf;
PrintFamily;//递归调用输出孩子结点
printf”);
}
if//递归调用输出兄弟结点
{
printf;
PrintFamily;
}
}
}
/*结点定位函数*/
FNODE*findnode//在家谱中定位所要查找结点{
FNODE*q;
if
returnNULL;
elseif)//如果与查找人名相同则返回该结点returnb;
else
{
q=findnode;//否则递归调用其左结点
if
returnq;
elsereturn);//递归调用右结点
}
篇二:
数据结构实验报告
肇庆学院计算机学院/软件学院
实验报告
专业_软件工程_班级14软件2班姓名_黎福喜_学号201424133225课程名称数据结构学年2015—2016学期1?
/2□课程类别专业必修?
限选□任选□实践□评分:
批阅老师:
2015年月日实验1线性表的基本操作
?
实验目的
1、掌握线性表的基本一算。
2、掌握顺序存储的概念,学会对顺序存储数据结构进行操作。
3、加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力。
?
实验内容
1、编写线性表举报操作函数
(1)InitList初始化线性表;
(2)InsertList向线性表指定位置插入元素;
(3)DeleteList1删除指定元素的线性表记录;
(4)DeleteList2删除删除指定位置的线性表记录;
(5)FindList查找线性表中的元素;
(6)OutputList输出线性表元素。
2、调用上述函数实现下列操作:
(1)初始化线性表;
(2)调用插入函数建立一个线性表;
(3)在线性表中寻找指定的元素;
(4)在线性表中删除指定值的元素;
(5)在线性表中删除指定位置的元素;
(6)遍历并输出线性表。
?
实验结果
1、流程图
2、程序运行主要结果截图
2、程序源代码
#include#include#includestructLinearList{int*list;intsize;intMaxsize;};typedefstructLinearListLIST;voidInitList//线性表初始化{ifmalloc))==NULL){printf;exit;}L->size=0;L->Maxsize=ms;}intInsertList//插入//item-记录值;rc-插入位置{inti;if
return-1;ifrc=0;ifrc=L->size;forL->list[i+1]=L->list[i];L->list[rc]=item;L->size++;return0;}voidOutputList//输出{inti;forprintf;printf;}intDeleteList1//删除元素值的线性表记录{inti,n;forifbreak;if{forL->list[n]=L->list[n+1];L->size--;returni;}return-1;}intDeleteList2//删除指定位置的线性表记录{intn;ifreturn-1;forL->list[n]=L->list[n+1];L->size--;return0;}intFindList//查找{inti;forifreturni;return-1;}intmain{LISTLL;inti,r,choice;printf;InitList;printf;do{printf;printf;printf;printf;printf;printf;printf;printf;fflush;scanf;switch{case1:
while//添加元素
{printf;fflush;//清空标准输入缓冲区scanf;ifbreak;printf;scanf;InsertList;printf;OutputList;}break;case2:
while//按元素值查找元素{printf;fflush;scanf;ifbreak;r=FindList;ifprintf;elseprintf;}break;case3:
while//按元素值删除元素{printf;fflush;scanf;ifbreak;r=DeleteList1;ifprintf;else{printf;printf;OutputList;}}break;case4:
while//按位置删除元素{printf;fflush;scanf;ifbreak;i=DeleteList2;ifprintf;else{printf;OutputList;}}break;case0:
break;}}while;printf;return0;}
实验2链表的基本操作
?
实验目的
1、掌握链表的概念,学会对链表进行操作。
2、加深对链式存储数据结构的理解,逐步培养解决实际问题的编程能力。
?
实验内容
1、编写链表几把操作函数:
(1)InitList初始化链表;
(2)InsertList1向链表的指定位置插入元素;
(3)InsertList2向有序链表插入元素;
(4)DeleteList删除指定元素值的链表记录;
(5)FindList查找链表中的元素;
(6)OutputList输出链表元素。
2、调用上述函数实现下列操作:
(1)初始化链表;
(2)调用插入函数建立一个链表;
(3)在链表中寻找指定的元素;
(4)在链表中删除指定值的元素;
(5)遍历并输出链表。
?
实验结果
1、流程图
2、程序运行主要结果截图
篇三:
数据结构实验报告
本科生实验报告
(五)
姓名:
学院:
专业:
班级:
实验课程名称:
数据结构实验
实验日期:
2013年6月19日
指导教师及职称:
实验成绩:
开课时间:
2012~2013学年第二学期
实验管理中心印制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告