数据结构--线性表实验报告+二叉树实验报告
更新时间:2023-05-11 22:37:01 阅读量: 实用文档 文档下载
线性表实验报告+二叉树实验报告
实验报告
班级: 学号: 姓名: 日期:
1. 实验题目
编辑一个程序,用来演示线性表的建立、插入、删除等操作。
2. 需求分析
本演示程序在Microsoft Visual C++ 6.0环境下编写调试,完成线性表的生成、任意位置的插入、删除等。
(1)输入的形式和输入的范围:执行插入操作时,需要输入插入位置和元素的值;执行删除操作时,需要输入待删除元素的位置。在所有输入中,元素的值都是由整数、字符数组和字符数组组成的。
(2)输出的形式:在所有操作中都要求显示相关操作是否正确以及操作后线性表的内容。其中删除操作完成后,要显示删除后所剩的元素的值。
(3)程序所能达到的功能:完成线性表的生成、插入、删除操作。
3. 概要设计
(1)为了实现上述程序功能,需要定义线性表的数据结构。线性表单个元素的结构如图1.1所示。
图1.1 线性表元素的数据结构
(2)本程序包含6个函数: ①主函数main()。
②初始化线性表函数creat()。 ③插入元素函数insert()。 ④删除元素函数del()。
线性表实验报告+二叉树实验报告
各函数间的关系如图1.2所示。
图1.2 程序所包含各函数之间的关系
4. 详细设计
实现概要设计中定义的所有的数据类型,对每个操作给出具体的算法;对主程序和其他模块也都需要写出具体算法。
(一)数据类型。用C语言描述如下:
typedef struct {
int num; float score; }student;
(二)线性表的基本操作函数的具体算法:
1. 主函数main()的具体算法:
void main() {
student L[4]; creat(L); insert(L); del(L); }
2. 初始化线性表函数creat()的具体算法:
void creat(student s[4]) {
printf("输入学生数据:\n"); for(i=0;i<3;i++)
scanf("%d%f",&s[i].num,&s[i].score);
线性表实验报告+二叉树实验报告
printf("目前数据数:%d组\n",i); for(i=0;i<3;i++)
printf("%d\t%5.1f\t\n",s[i].num,s[i].score); }
3. 插入元素函数insert()的具体算法:
void insert(student s[4]) {
printf("输入插入数据位置:\n"); scanf("%d",&j); if(j>4)
printf("输入有误,请输入在0~4之间\n"); scanf("%d",&j); // if(j=4)
// printf("输入插入数据:\n");
// scanf("%d%f",&s[j-1].num,&s[j-1].score); if(j<=4)
for(i=3;i>=j-1;i--) s[i]=s[i-1];
printf("输入插入数据:\n");
scanf("%d%f",&s[j-1].num,&s[j-1].score); n=n+1;
printf("目前数据数:%d组\n",n); for(i=0;i<4;i++)
printf("%d\t%5.1f\t\n",s[i].num,s[i].score); }
4. 删除元素函数del()的具体算法:
void del(student s[4]) {
printf("输入删除数据位置:\n"); scanf("%d",&j); if(j>4)
printf("输入有误,请输入在0~4之间\n"); scanf("%d",&j); for(i=j-1;i<4;i++) s[i]=s[i+1]; n=n-1;
printf("目前数据数:%d组\n",n); for(i=0;i<3;i++)
线性表实验报告+二叉树实验报告
printf("%d\t%5.1f\t\n",s[i].num,s[i].score); }
5. 测试结果
(1)初始化线性表函数creat():
根据提示信息“输入学生数据”,依次输入三个学生数据,运行结果将显示
“目前数据数:3组”,则会依次显示3组数据,如图1.3所示。
图1.3 初始化线性表函数creat()
(2)插入元素函数insert():
根据提示信息“输入插入数据位置”,输入一个正整数,此时整数会根据
初始化创建函数给定的数据个数条件,输入大于等于1或小于等于X(X表示初始化数据个数)的数值,会正确执行插入程序;否则程序执行ERROR。根据提示信息,输入插入数据。输入结束时,会显示目前数据数,清晰明了,如图1.4所示。
图1.4 插入元素函数insert()
(3)删除元素函数del():
根据提示信息“输入删除数据位置”,输入一个正整数,此时整数由于在初始化设定的数据个数基础上插入了新数据,所以,输入删除数据的位置时要大于等于1或小于等于初始化数据个数加上插入的数据个数之和,否则程序将是
线性表实验报告+二叉树实验报告
ERROR。执行结束,显示信息“目前数据数”,如图1.5所示。
图1.5 删除元素函数del()
线性表实验报告+二叉树实验报告
实验报告
班级: 学号: 姓名: 日期:
1. 实验题目
编辑一个程序,用来演示二叉树的初始化,二叉树的递归先序、中序,非递归先序、中序等操作。
2. 需求分析
本演示程序在Microsoft Visual C++ 6.0环境下编写调试,完成二叉树的各种操作。为了实现对二叉树的有关操作,首先要在计算机中建立所需的二叉树,建立二叉树有各种不同的方法。
一种方法是利用二叉树的性质5来建立二叉树,输入数据时需要将结点的序号(按满二叉树编号)和数据同时给出:(序号,数据元素)。例如二叉树输入数据顺序为:(1,A),(2,B),(3,C),(4,D),(6,E),(7,F),(9,G),(13,H)。如下图1.1所示:
图1.1二叉树
另一种算法是教材中介绍的方法,这是一个递归方法,与二叉树的先序遍历有点相似。数据的组织是先序的顺序,上例二叉树的输入数据顺序应该是:ABD G CE H F。递归调用建立函数,建立当前结点的左右子树。
3. 概要设计
(1)为了实现上述程序功能,需要定义二叉树的数据结构,结构如图1.2所示。
线性表实验报告+二叉树实验报告
图1.2 二叉树的数据结构
(2)本程序包含6个函数,如下所示:
①主函数main();
②初始化二叉树函数CreatBiTree(Tree); ③递归先序函数PreOrderTrave(Tree); ④递归中序函数InOrderTrave(Tree); ⑤非递归先序函数Preorder(Tree); ⑥非递归中序函数Inorder(Tree)。
图1.3程序各函数之间的关系
4.详细设计
实现概要设计中定义的所有的数据类型,对每个操作给出具体的算法;对主程序和其他模块也都需要写出具体算法。 一.数据类型用C语言描述如下: typedef struct BiTNode {
char data;
struct BiTNode *lchild,*rchild,*par; int n;
}BiTNode,*BiTree;
struct BiTNode *stack[20];
二.二叉树的基本操作函数的具体算法: 1. 主函数main()的具体算法:
void main() {
线性表实验报告+二叉树实验报告
BiTNode *Tree;
printf("输入结点:\n"); CreatBiTree(Tree);
printf("\n递归先序:\n"); PreOrderTrave(Tree);
printf("\n递归中序:\n"); InOrderTrave(Tree);
printf("\n非递归先序:\n"); Preorder(Tree);
printf("\n非递归中序:\n"); Inorder(Tree);
}
2. 初始化二叉树函数creat()的具体算法:
int CreatBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch); if(ch==' ') T=NULL; else
{
T=(BiTNode *)malloc(sizeof(BiTNode)); T->data=ch; T->n=0;
CreatBiTree(T->lchild); CreatBiTree(T->rchild); }
return (OK); }
3. 递归先序函数PreOrderTrave(Tree):
void PreOrderTrave(BiTree T) { if(T) {
printf("%c ",T->data); PreOrderTrave(T->lchild); PreOrderTrave(T->rchild);
线性表实验报告+二叉树实验报告
}
}
4. 递归中序函数InOrderTrave(Tree):
void InOrderTrave(BiTree T) { if(T)
{InOrderTrave(T->lchild); printf("%c ",T->data); InOrderTrave(T->rchild);} }
5. 非递归先序函数Preorder(Tree):
void Preorder(BiTree T) {
int top=0;
while(T || top!=0) {
while (T)
{printf("%c ",T->data ); stack[top++]=T; T=T->lchild ; }
T=stack[--top]; T=T->rchild ; } }
6. 非递归中序函数Inorder(Tree):
void Inorder(BiTree T) {
int top=0;
while(T || top!=0) {
while (T) {
stack[top++]=T; T=T->lchild ; }
T=stack[--top];
线性表实验报告+二叉树实验报告
printf("%c ",T->data ); T=T->rchild ; } } 4. 测试结果
输入数据的组织是先序的顺序,输入需求分析中例二叉树数据顺序应该是:ABD G CE H F,如图1.4所示,演示二叉树的递归先序、中序和非递归先序、中序结果:
正在阅读:
我的青春我做主手抄报02-20
第13课___我想要__我能要05-05
编童话的评课稿02-28
马原简答题及论述题汇总04-14
我的未来我做主作文800字07-16
设备缺陷和故障管理04-24
小学生我读书我快乐作文06-15
Unit 705-18
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 实验
- 报告
- 数据结构
- 线性
- 浅析网络环境下农业科技图书馆的联合服务
- 后金融危机时代中小企业债务融资风险研究
- 土建交接验收标准(精装修)
- 四年级奥数举一反三逻辑推理教案
- 革命军人思想道德修养论文
- 农产品销售合同模板-农产品生产合同和销售合同
- 中国美术学院设计素描教案
- 2012会计继续教育考试答案
- 党风建设和反腐倡廉工作情况汇报10
- 美国拟16亿多美元造新空军一号
- 中秋灯谜大全及答案1
- 组装电脑方法步骤
- 中级公路运输一、运输与运输业章节练习(2014-9-6)
- 药品养护试题_Microsoft_Word_文档
- xx市房地产市场调查报告
- WY25型挖掘机斗体与斗齿的焊接修复方法
- 相似三角形练习题(8)
- 顶板预留洞口施工方案
- 中国的商业和旅游业
- 济南市2010年初三年级学业水平考试