数据结构实验报告.docx

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

数据结构实验报告.docx

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

数据结构实验报告.docx

数据结构实验报告

数据结构实验报告

  篇一:

数据结构实验报告范例

  《数据结构与算法》实验报告

  专业班级姓名学号

  实验项目

  实验一二叉树的应用

  实验目的

  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学年第二学期

  实验管理中心印制

  

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

当前位置:首页 > 表格模板 > 书信模板

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

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