厦门理工 c语言数据结构 实验6
- 格式:doc
- 大小:1.67 MB
- 文档页数:8
《数据结构》实验报告姓名:**学号:*********成绩:_____目录实验一,线性表的应用 (3)实验二,栈和队列的应用 (8)实验三,数组的应用 (13)实验四,树和二叉树的应用 (19)实验五,图的应用 (24)实验六,查找表的应用 (32)实验七,排序算法的应用 (44)实验一线性表的应用【实验目的】1.熟练掌握线性表的基本操作在顺序存储和链式存储上的实现;2.以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点;3.掌握线性表的动态分配顺序存储结构的定义和基本实现;4.通过对本章实验帮助学生加深对C语言的使用(特别是函数参数调用、指针类型的应用和链表的建立等各种基本操作)。
【实验内容】约瑟夫问题的实现:n只猴子要选猴王,所有猴子按1,2,…,n编号围坐一圈,从第1只开始按1,2,…,m报数,凡报到m号的猴子退出圈外,如此循环报数,直到圈内省剩下一只猴子时,这个猴子就是猴王。
编写一个程序实现上述过程,n和m由键盘输入。
【实验要求】1.要求用顺序表和链表分别实现约瑟夫问题;2.独立完成,严禁抄袭;3.上交的实验报告由如下部分组成:①实验名称②实验目的③实验内容(问题描述,算法描述,程序清单,测试结果,算法分析)。
实验结果:一,源程序:#include<stdio.h> #include<stdlib.h>#define Maxsize 80struct SeqList{int data[Maxsize];int len;};typedef struct SeqList SeqList;void InitList(SeqList *L){L=(SeqList *)malloc(sizeof(SeqList)); L->len=0;}void MadeList(SeqList *L){int i;int people;printf("请输入参选的总数:\n"); scanf("%d",&people);for (i=0;i<people;i++){L->data[i]=i+1;printf(" %d ",L->data[i]); }printf("\n");L->len=people;}void WentList(SeqList *L){int m,i,j;int k=0;printf("请输入出列数:\n"); scanf("%d",&m);for (i=L->len;i>0;i--){k=(k+m-1)%i;printf(" %d ",L->data[k]); for (j=k;j<i-1;j++){L->data[j]=L->data[j+1]; }L->len=L->len-1;}printf("\n");}void main(){SeqList *L;InitList(L);MadeList(L);WentList(L);}二,运行结果及截屏视图:实验二栈和列队的应用【实验目的】1.熟练掌握栈和列队的结构,以及这两种数据结构的特点;2.能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空时的判断条件和描述方法;3.熟练掌握链队列和循环列表的基本运算,特别注意队列满和队列空时的判断条件和描述方法。
数据结构(C语言版) 实验报告学院计算机科学与技术专业计算机大类强化学号xxx班级xxx姓名xxx指导教师xxx实验1实验题目:单链表的插入和删除实验目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。
实验要求:建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。
实验主要步骤:1、分析、理解给出的示例程序。
2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。
3、修改程序:(1)增加插入结点的功能。
(2)将建立链表的方法改为头插入法。
程序代码:#include"stdio.h"#include"string.h"#include"stdlib.h"#include"ctype.h"typedef struct node //定义结点{char data[10]; //结点的数据域为字符串struct node *next; //结点的指针域}ListNode;typedef ListNode * LinkList; // 自定义LinkList单链表类型LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表LinkList CreatList(void); //函数,用头插入法建立带头结点的单链表ListNode *LocateNode(); //函数,按值查找结点void DeleteList(); //函数,删除指定值的结点void printlist(); //函数,打印链表中的所有值void DeleteAll(); //函数,删除所有结点,释放内存ListNode * AddNode(); //修改程序:增加节点。
c 与数据结构实验报告C语言与数据结构实验报告引言:C语言作为一种高级编程语言,被广泛应用于软件开发和系统编程领域。
在计算机科学的学习过程中,数据结构是一门重要的课程,它涉及到如何组织和存储数据以便于有效地访问和操作。
本实验报告将探讨C语言与数据结构的关系,并介绍在实验中所学到的内容。
一、C语言的特点和应用C语言作为一种通用的高级编程语言,具有许多特点和优势。
首先,C语言具有高效性和可移植性。
它的语法简洁,执行效率高,可以在不同的操作系统上运行。
其次,C语言具有丰富的库函数支持,使得开发者可以方便地调用各种功能。
此外,C语言还支持指针操作,使得程序更加灵活和高效。
C语言在软件开发领域有广泛的应用。
例如,操作系统的开发离不开C语言,因为它能够直接访问硬件设备并进行底层编程。
此外,C语言还被广泛应用于嵌入式系统、游戏开发、网络编程等领域。
因此,掌握C语言对于计算机科学专业的学生来说是非常重要的。
二、数据结构的概念和分类数据结构是计算机科学中研究数据组织和存储方式的一门学科。
它涉及到如何将数据以某种特定的方式组织起来,以便于高效地访问和操作。
数据结构可以分为线性结构、树形结构和图形结构三大类。
1. 线性结构线性结构是最简单的数据结构之一,它的特点是数据元素之间存在一对一的关系。
常见的线性结构有数组、链表和栈等。
其中,数组是一种连续存储的数据结构,具有随机访问的特点;链表是一种离散存储的数据结构,通过指针将各个节点连接起来;栈是一种特殊的线性结构,具有后进先出(LIFO)的特点。
2. 树形结构树形结构是一种非线性的数据结构,它的特点是数据元素之间存在一对多的关系。
常见的树形结构有二叉树、堆和哈夫曼树等。
其中,二叉树是一种每个节点最多只有两个子节点的树形结构;堆是一种特殊的二叉树,具有一定的排序规则;哈夫曼树是一种用于数据压缩的树形结构。
3. 图形结构图形结构是一种更加复杂的非线性数据结构,它的特点是数据元素之间存在多对多的关系。
《C语言程序设计》实验报告实验序号:3 实验项目名称:顺序、选择结构附源程序清单:1)1. #include<stdio.h>2)void main()3){4)float c1,c2,c3,f1,f2,f3;5)printf("\nplease enter three f\n");6)scanf("%f\n%f\n%f",&f1,&f2,&f3);7)c1=(f1-32)*5/9;8)c2=(f2-32)*5/9;9)c3=(f3-32)*5/9;10)printf("\nhua shi wen du fenbie wei :\n%.2f1\n%.2f\n%.2f",c1,c2,c3);11)}2.3.4. #include<stdio.h>void main(){int a,b,c,d;printf("\n请输入一个四位数:\n");scanf("%1d%1d%1d%1d",&a,&b,&c,&d);printf("%d%d%d%d\n",d,c,b,a);}5. #include<stdio.h>void main(){char c;printf("Do you have Experience with C? press N/Y \n");c=getchar();switch(c){case 'n':printf("\nWe are sorry to tell you ...\n");break;case 'N':printf("\nWe are sorry to tell you ...\n");break;case 'y':printf("\nWelcome join us! \n");break;case 'Y':printf("\nWelcome join us!\n ");break;default:printf("Input invalid score\n\n");}}6.#include<stdio.h>void main(){float time,cost1,cost2;printf("请输入你一个月打电话的时间(分钟):");scanf("%f",&time);cost1=0.6*time;cost2=0.4*time+50;if(cost1<cost2){printf("第一种话费%.2f,第二种话费%.2f,比较后第一中比较省钱\n",cost1,cost2);}else printf("第一种话费%.2f,第二种话费%.2f,比较后第二中比较省钱\n",cost1,cost2); }7. #include<stdio.h>void main(){float wage,tax1,tax2,tax3,tax4;printf("请输入工资:");scanf("%f",&wage);tax2=(wage-1000)*0.05;tax3=4000*0.005+(wage-5000);tax4=4000*0.05+5000*0.1+(wage-10000)*0.2;if(wage<=1000){printf("该同志的工资%F低于标准免税\n",wage);}elseif(wage>1000&&wage<=5000){printf("该同志工资%f本月应该缴纳税收%.2f\n",wage,tax2);}elseif(wage>5000&&wage<=10000){printf("该同志工资%f本月应该缴纳税收%.2f\n",wage,tax3);}else printf("该同志工资%f本月应该缴纳税收%.2f\n",wage,tax4);}。
数据结构C语言版实验教案一、实验目的1. 理解数据结构的基本概念和原理。
2. 掌握C语言在数据结构中的应用和实现。
3. 培养动手实践能力和团队协作精神。
二、实验内容1. 线性表的实现与操作:顺序存储结构、链式存储结构。
2. 栈和队列的实现与操作。
3. 线性排序算法实现与分析。
4. 树与二叉树的实现与操作。
5. 图的实现与操作。
三、实验环境1. 编程语言:C语言。
2. 开发工具:Visual Studio、Code::Blocks等。
3. 操作系统:Windows、Linux或Mac OS。
四、实验步骤1. 实验准备:了解实验内容,阅读相关教材和资料,明确实验目标和任务。
2. 设计实验方案:根据实验内容,设计相应的数据结构和算法。
3. 编写实验代码:按照实验方案,用C语言编写代码。
4. 调试和测试:运行代码,检查功能是否符合预期,发现问题并及时修改。
五、实验评价1. 代码质量:代码结构清晰,注释详细,可读性强。
2. 功能实现:实验要求的功能全部实现,且运行稳定。
3. 算法效率:分析并优化算法,提高程序运行效率。
4. 实验报告:内容完整,包括实验目的、内容、步骤、总结等。
5. 团队协作:积极参与讨论,与团队成员共同解决问题。
六、实验一:线性表的实现与操作1. 实验目的:掌握顺序存储结构线性表的实现。
掌握链式存储结构线性表的实现。
熟悉线性表的基本操作,如插入、删除、查找等。
2. 实验内容:实现一个顺序存储结构线性表。
实现一个链式存储结构线性表。
实现线性表的插入、删除、查找等操作。
3. 实验步骤:设计顺序存储结构线性表的数据类型和操作函数。
实现链式存储结构线性表的数据类型和操作函数。
编写测试代码,验证线性表操作的正确性。
4. 实验评价:线性表结构设计合理,代码清晰。
能够正确实现线性表的基本操作。
测试代码全面,能够验证操作的正确性。
七、实验二:栈和队列的实现与操作1. 实验目的:理解栈和队列的基本概念。
掌握栈和队列的顺序存储结构实现。
《数据库原理与应用》实验报告
2.创建一个存储过程
四、实验结果与数据处理
实验6.1 创建并执行存储过程
1.用企业管理器创建并执行一存储过程
2.用SQL创建一存储过程
实验6.2 修改存储过程
1.用企业管理器修改存储过程Prc_Qsinf。
存储过程的定义如下:
2.用SQL修改存储过程Prc_Qsinf。
.
实验 6.3 删除存储过程
1.用企业管理器删除存储过程Pro_Qsinf;
2.用SQL删除存储过程Pro_Qscore。
实验6.4 T-SQL程序设计逻辑
1.计算1~100之间所有能被3整除的数的个数和总和。
2.求学生表中选取SNO,SEX,如果为“男”则输出“M”,如果为“女”则输出“F”
实验6.5 面向复杂的T-SQL程序设计
1.从教学数据库jxsk中查询所有同学选课成绩情况:姓名、课程名、成绩。
要求:凡成绩为空者输出“未考”、小于60分的输出“不及格”;60分至70分的输出“及格”;70分至80分的输出“中”;80分至90分的输出“良好”;90分至100分的输出“优秀”。
并且输出记录按下列要求排序:先按SNO升序,再按CNO号升序,最后按成绩降序。
2.现给教师增加工资的操作
实验6.6 使用游标1.定义一个游标
2.创建一个存储过程
五、分析与讨论
能够参照课本完成实验。
数据结构实验报告c语言版数据结构实验报告(C语言版)引言:数据结构是计算机科学中的重要概念,它关注如何在计算机中存储和组织数据以便有效地访问和操作。
本实验报告将介绍在C语言中实现的一些常见数据结构及其应用。
一、线性表线性表是最基本的数据结构之一,它是一种有序的数据元素的集合。
在C语言中,可以使用数组或链表来实现线性表。
数组具有固定大小的优点,但插入和删除操作较为复杂。
链表则可以动态地分配内存,但访问元素需要遍历整个链表。
二、栈和队列栈和队列是两种特殊的线性表。
栈是一种后进先出(LIFO)的数据结构,可以使用数组或链表实现。
常见的应用包括函数调用、表达式求值等。
队列是一种先进先出(FIFO)的数据结构,同样可以使用数组或链表实现。
它常用于任务调度、消息传递等场景。
三、树树是一种非线性的数据结构,它由节点和边组成。
树的每个节点可以有零个或多个子节点,其中一个节点被称为根节点。
常见的树结构包括二叉树、二叉搜索树、平衡二叉树等。
树的应用广泛,例如文件系统、数据库索引等。
四、图图是由节点和边组成的非线性数据结构,它可以用来表示各种实体之间的关系。
图可以是有向的或无向的,可以是带权重的或无权重的。
图的常见应用包括社交网络、路由算法等。
在C语言中,图通常使用邻接矩阵或邻接表来表示。
五、排序算法排序算法是数据结构中的经典问题之一。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
每种排序算法都有其特点和适用场景,选择合适的排序算法可以提高程序的效率。
六、查找算法查找算法是在数据集中查找指定元素的过程。
常见的查找算法包括线性查找、二分查找、哈希查找等。
线性查找适用于无序数据集,而二分查找适用于有序数据集。
哈希查找通过散列函数将关键字映射到存储位置,可以快速定位元素。
七、实验总结通过本次实验,我们学习了C语言中常见的数据结构及其应用。
线性表、栈和队列是最基本的数据结构,树和图则提供了更灵活的数据组织方式。
数据结构(C语言版) 实验报告实验报告1·实验目的本实验的目的是通过使用C语言实现各种数据结构,包括链表、栈、队列和树等,以加深对这些数据结构的理解,并学习其基本操作和应用场景。
2·实验环境和工具●操作系统:Windows 10●开发工具:Code::Blocks●编程语言:C语言3·实验内容3·1 链表3·1·1 定义链表结点的结构体3·1·2 创建链表3·1·3 插入结点3·1·4 删除结点3·1·5 遍历链表3·1·6 查找链表中的某个结点3·2 栈3·2·1 定义栈的结构体3·2·2 初始化栈3·2·3 入栈操作3·2·4 出栈操作3·2·5 判断栈是否为空3·2·6 获取栈顶元素3·3 队列3·3·1 定义队列的结构体3·3·2 初始化队列3·3·3 入队操作3·3·4 出队操作3·3·5 判断队列是否为空3·3·6 获取队头元素3·4 树3·4·1 定义树的结构体3·4·2 创建树3·4·3 插入结点3·4·4 删除结点3·4·5 遍历树3·4·6 查找树中的某个结点4·实验结果通过实验,我们成功实现了链表、栈、队列和树的基本操作,并对其进行了测试,验证了其正确性和效果。
5·总结与讨论本次实验使我对数据结构有了更深的理解,通过实际编写代码,加深了对链表、栈、队列和树等数据结构的认识。
数据结构(C语言版) 实验报告数据结构(C语言版) 实验报告第一章引言本实验报告主要介绍了在C语言环境下进行数据结构实验的相关内容。
数据结构是计算机科学中最基础的一门课程,它主要涉及到如何将数据组织和存储以便高效地访问和操作。
本实验报告将按照以下章节进行详细介绍。
第二章实验目的本实验的主要目的是通过实践操作,加深对数据结构的理解,并运用C语言编写相应的数据结构代码。
第三章实验环境1.操作系统:________Windows 102.编程语言:________C语言3.开发工具:________Visual Studio Code第四章实验内容1.线性表1.1 顺序表的实现1.1.1 初始化线性表1.1.2 插入操作1.1.3 删除操作1.1.4 查找操作1.2 链表的实现1.2.1 单链表的创建和遍历1.2.2 单链表的插入和删除操作 1.2.3 单链表的反转1.3 栈1.3.1 栈的实现1.3.2 栈的应用1.4 队列1.4.1 队列的实现1.4.2 队列的应用2.树2.1 二叉树的实现2.1.1 二叉树的创建和遍历2.1.2 二叉树的查找操作2.1.3 二叉树的插入和删除操作2.2 平衡二叉树2.2.1 平衡二叉树的实现2.2.2 平衡二叉树的插入和删除操作 2.3 堆2.3.1 堆的实现2.3.2 堆的操作2.4 哈夫曼树2.4.1 哈夫曼树的构建2.4.2 哈夫曼编码和解码3.图3.1 图的表示方法3.1.1 邻接矩阵3.1.2 邻接表3.2 图的遍历算法3.2.1 深度优先搜索(DFS)3.2.2 广度优先搜索(BFS)3.3 最小树3.3.1 Kruskal算法3.3.2 Prim算法3.4 最短路径3.4.1 Dijkstra算法3.4.2 Floyd算法第五章实验结果本实验通过编写相关的数据结构代码和算法,成功实现了线性表、树和图的基本功能。
经测试,各功能模块能正常运行,并能给出正确的结果。
数据结构C语言版实验报告《数据结构 C 语言版实验报告》一、实验目的本次实验旨在通过使用 C 语言实现常见的数据结构,加深对数据结构基本概念和操作的理解,提高编程能力和问题解决能力。
二、实验环境操作系统:Windows 10编程环境:Visual Studio 2019三、实验内容1、线性表顺序表的实现链表的实现(包括单向链表、双向链表)2、栈和队列栈的实现(顺序栈、链栈)队列的实现(顺序队列、循环队列、链队列)3、数组和字符串数组的基本操作字符串的操作(字符串的存储、字符串的比较、字符串的连接等)4、树和二叉树二叉树的遍历(前序、中序、后序)二叉树的创建和基本操作5、图图的存储(邻接矩阵、邻接表)图的遍历(深度优先遍历、广度优先遍历)四、实验步骤1、线性表顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。
实现顺序表的初始化、插入、删除、查找等操作。
编写测试程序,对顺序表的各种操作进行测试。
链表的实现定义单向链表和双向链表的数据结构,包括节点结构体。
实现链表的创建、插入、删除、查找等操作。
编写测试程序,验证链表操作的正确性。
栈的实现定义顺序栈和链栈的数据结构。
实现栈的入栈、出栈、栈顶元素获取等操作。
进行栈的操作测试。
队列的实现定义顺序队列、循环队列和链队列的数据结构。
实现队列的入队、出队、队头队尾元素获取等操作。
对队列的操作进行测试。
3、数组和字符串数组的操作实现数组的初始化、元素访问、数组元素的修改等。
测试数组的基本操作。
字符串的操作定义字符串的存储方式。
实现字符串的比较、连接、复制等操作。
编写测试用例,验证字符串操作的准确性。
二叉树的遍历采用递归方式实现二叉树的前序、中序、后序遍历。
输出遍历结果进行验证。
二叉树的创建和基本操作构建二叉树的数据结构。
实现二叉树的节点插入、删除等操作。
5、图图的存储分别用邻接矩阵和邻接表来存储图。
实现图的初始化操作。
图的遍历用深度优先遍历和广度优先遍历算法对图进行遍历。
C语言版数据结构实验报告(doc 9页)苏州科技学院数据结构(C语言版)实验报告专业班级测绘0911学号0920115130姓名朱辉实习地点C1-203指导教师史守正二、源程序及注释(打包上传):三、运行输出结果:四、调试和运行程序过程中产生的问题及采取的措施:在程序编辑的过程中,有许多地方出现不能顺序运行的,还有代码出现遗漏出错,图的遍历是重点但因为知识的残缺不能完整的编译出来,又或者编译的程序不能正确的得到结果,再通过多人合作共同讨论后得到了满意的解决。
五、对算法的程序的讨论、分析,改进设想,其它经验教训:经过这次这么复杂的程序实验,我终于发现了调用函数的巨大优越性,以前遇到都是很短的程序,感觉调用有点多余,但复杂的程序时,如果不采用调用的话,会使程序非常的乱,改程序时不知道从哪改,调用函数能够更好使程序简洁话,层次话,更加容易让人看懂这次试验的逻辑性给了我们很大启发通过本次实验让我对图有了更深刻的认识,再通过多次的更改后终于将实验做出来,在实验中也出现了许多问题,有不出结果,有不能运行的,但最终只要努力都会搞定的实验五查找一、程序设计的基本思想,原理和算法描述:实现二叉排序树上的查找、插入、删除算法。
具体实现要求:1.用二叉链表做存储结构,输入键值序列,利用查找、插入算法建立一棵二叉排序树。
2.按中序遍历这棵二叉排序树。
3.在二叉排序树上插入结点。
4.删除二叉排序树上的结点。
二、源程序及注释(打包上传):三、运行输出结果:四、调试和运行程序过程中产生的问题及采取的措施:查找是一种常用到的方法在程序中十分常见,在程序运行中。
由于对遍历了解的不深刻不能够完全领悟其中的运行原理,所以出现没有结果输出的现象。
在书中不断的了解分析下从而得到了解决,书本的知识很有作用。
五、对算法的程序的讨论、分析,改进设想,其它经验教训:经过这次这么复杂的程序实验,我终于发现了调用函数的巨大优越性,以前遇到都是很短的程序,感觉调用有点多余,但复杂的程序时,如果不采用调用的话,会使程序非常的乱,改程序时不知道从哪改,调用函数能够更好使程序简洁话,层次话,更加容易让人看懂这次试验的逻辑性给了我们很大启发,在程序不断复杂的今天只有很好了解程序的过程,把握程序中心思想才能够更好的完善研发程序,在不断的累积中达到更高的层次。
数据结构c语言实验报告数据结构C语言实验报告引言:数据结构是计算机科学中的重要概念,它是指一组数据的组织方式和存储结构,以及对这组数据进行操作的方法。
在本次实验中,我们将使用C语言来实现一些常见的数据结构,并测试其功能和性能。
一、线性表线性表是最基本的数据结构之一,它是一种有序的数据元素序列。
我们使用C语言中的数组来实现线性表,并实现了插入、删除、查找等操作。
通过实验,我们发现在插入和删除操作频繁的情况下,使用链表实现的线性表性能更好。
二、栈栈是一种特殊的线性表,它的插入和删除操作只能在同一端进行。
我们使用C语言中的数组来实现栈,并实现了入栈和出栈操作。
通过实验,我们发现栈在递归算法、表达式求值等场景中有着重要的应用。
三、队列队列也是一种特殊的线性表,它的插入操作在一端进行,删除操作在另一端进行。
我们使用C语言中的数组来实现队列,并实现了入队和出队操作。
通过实验,我们发现队列在模拟排队、调度算法等场景中有着广泛的应用。
四、二叉树二叉树是一种特殊的树形结构,每个节点最多有两个子节点。
我们使用C语言中的结构体来实现二叉树,并实现了先序、中序和后序遍历等操作。
通过实验,我们发现二叉树在搜索算法、排序算法等场景中有着重要的应用。
五、图图是一种复杂的非线性结构,它由节点和边组成。
我们使用C语言中的邻接矩阵和邻接表来实现图,并实现了深度优先搜索和广度优先搜索等操作。
通过实验,我们发现图在社交网络分析、路径规划等领域有着广泛的应用。
六、排序算法排序算法是数据结构中的重要内容,它用于将一组无序的数据按照某种规则进行排序。
我们使用C语言实现了常见的排序算法,如冒泡排序、插入排序、选择排序、快速排序等。
通过实验,我们比较了这些排序算法的性能和稳定性。
七、性能分析在实验过程中,我们使用了时间复杂度和空间复杂度来评估数据结构的性能。
时间复杂度表示算法执行所需的时间,空间复杂度表示算法执行所需的内存空间。
通过实验,我们了解了不同数据结构和算法的性能特点,为实际应用提供了参考依据。
《C语言程序设计》实验报告实验序号:6 实验项目:函数学号姓名专业、班级网络工程实验地点指导教师林仙丽实验时间2012年12月29日一、实验目的及要求1、掌握函数声明、定义和使用的方法;2、掌握函数嵌套和递归调用的方法;3、掌握全局变量、局部变量、静态局部变量的概念和使用方法;4、掌握定义头文件的方法,学会建立和调试多文件程序;5、实验内容采用函数方法完成。
二、实验设备(环境)及要求使用Visual C++ 6.0;windows系列操作系统的环境。
三、实验内容与步骤1.编写一个函数prt(c,n),重复打印给定的字符c,n次。
在主函数中调用prt(c,n)函数,打印一个直角三角形。
如:prt(*,6)的结果如下:*********************【实验提示】函数prt(c,n)完成输出功能,是一个void函数,有两个参数。
函数源代码部分:运行结果截图:2.写四个函数分别用于计算圆周长、圆面积、圆柱表面积,圆柱体积,在main函数中完成测试。
运行结果截图:3.根据以下公式求π的近似值,直到最后一项的绝对值小于10-5为止22222n13121116++++≈ π 运行结果截图:4.用递归方法计算3333321n ++++ 的值,n 的值由键盘输入运行结果截图:5.以下程序的功能是计算s=∑=nk k 0!,补足所缺语句。
#include “stdio.h ”long fun(int n){ int I;long m;m= 1 ;for(I=1; I<=n; I++) m= I*m ;return m;}main(){ long m;int k,n;scanf(“%d ”,&n);m= 0 ;for(k=0;k<=n;k++) m=m+ fun(k) ;printf(“%ld\n ”,m);}运行结果截图:6.【附加题】写一个函数,使输入的一个字符串按反序,在主函数中输入字符串和,在非主函数中输出反序后的字符串。
《数据结构》实验报告实验序号:6 实验项目名称:树和二叉树的操作}while(x!=-9999);}改写以上程序,实现功能如下(任选两题):1.编写函数实现前序、中序和后序遍历。
运行结果截图:2.编写函数实现计算叶节点个数。
运行结果截图:四、分析与讨论附源程序清单:1.#include <stdlib.h>#include <stdio.h>typedef int TElemType;typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;}BiNode, *Bitree;DLR( Bitree root ){ if (root !=NULL) { //非空二叉树printf("%d",root->data); //访问DDLR(root->lchild); //递归遍历左子树DLR(root->rchild); //递归遍历右子树}return(0);}LDR(Bitree root){ if(root !=NULL){LDR(root->lchild);printf("%d",root->data);LDR(root->rchild);}return(0);}LRD (Bitree root){ if(root !=NULL) {LRD(root->lchild);LRD(root->rchild);printf("%d",root->data);}return(0);}Bitree root;//定义根结点void insert_data(int x) /*生成/树*/{Bitree p,q,s;s=(Bitree)malloc(sizeof(BiNode)); //创建结点s->data=x; //结点赋值s->lchild=NULL;s->rchild=NULL;if(!root){root=s;}else{p=root;while(p) /*如何接入二叉排序树的适当位置*/{q=p;if(p->data==x) //相同结点不能重复插入{printf("data already exist! \n");return;}else if(x<p->data)p=p->lchild;elsep=p->rchild;}if(x<q->data)q->lchild=s;elseq->rchild=s;}}void main() /*先生成二叉排序树*/{int i=1,x; //i记录结点个数,x存放结点值root=NULL; /*千万别忘了赋初值给root!*/printf("请输入数据,-9999表示输入结束\n");do{printf("please input data %d:",i);i++;scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/if(x==-9999){printf("\nNow output data value:\n");}elseinsert_data(x); /*调用插入数据元素的函数*/}while(x!=-9999);printf("\nDLR");DLR(root);printf("\nLDR");LDR(root);printf("\nLRD");LRD(root);}2.#include <stdlib.h>#include <stdio.h>typedef int TElemType;typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;}BiNode, *Bitree;Bitree root;//定义根结点int CountLeaf (Bitree root){ //返回指针T所指二叉树中所有叶子结点个数int m,n;if (!root ) return 0;if (!root->lchild && !root->rchild) return 1;else {m = CountLeaf( root->lchild); n = CountLeaf( root->rchild);return (m+n);} //else} // CountLeafvoid insert_data(int x) /*生成/树*/{Bitree p,q,s;s=(Bitree)malloc(sizeof(BiNode)); //创建结点s->data=x; //结点赋值s->lchild=NULL;s->rchild=NULL;if(!root){root=s;}else{p=root;while(p) /*如何接入二叉排序树的适当位置*/{q=p;if(p->data==x) //相同结点不能重复插入{printf("data already exist! \n");return;}else if(x<p->data)p=p->lchild;elsep=p->rchild;}if(x<q->data)q->lchild=s;elseq->rchild=s;}}void main() /*先生成二叉排序树*/{int i=1,x; //i记录结点个数,x存放结点值int sum;root=NULL; /*千万别忘了赋初值给root!*/printf("请输入数据,-9999表示输入结束\n");do{printf("please input data %d:",i);i++;scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/if(x==-9999){printf("\nNow output data value:\n");}elseinsert_data(x); /*调用插入数据元素的函数*/ }while(x!=-9999);printf(" \n叶节点个数=");sum=CountLeaf (root);printf("%d\n",sum);}。
数据结构(C语言版) 实验报告数据结构(C语言版) 实验报告1:引言1.1 问题描述在本实验中,我们需要设计一个基于C语言的数据结构,用于解决特定问题。
1.2 目的本实验的目的是通过设计和实现数据结构,加深对数据结构和C语言的理解,并应用所学的知识解决实际问题。
1.3 相关工作在这一章节中,我们将介绍与本实验相关的先前工作,并分析其优缺点,为我们的设计提供参考。
2:需求分析2.1 功能需求本节将详细描述所设计的数据结构需要实现的功能。
2.2 性能需求在这一节中,我们将明确数据结构的性能需求,例如时间复杂度和空间复杂度限制。
3:数据结构设计3.1 数据结构定义在这一节中,我们将给出所设计数据结构的定义,并详细说明每个字段的含义和作用。
3.2 数据结构操作在这一节中,我们将详细描述每个数据结构操作的实现。
这些操作包括插入,删除,查找等。
4:算法设计4.1 算法描述在这一节中,我们将给出在实现数据结构过程中使用的算法的详细描述。
我们将分析算法的时间复杂度,并讨论其优缺点。
4.2 算法优化在这一节中,我们将分析并设计优化算法,以提高数据结构的性能。
5:实验结果在这一节中,我们将给出实验结果,并分析实验数据。
我们还将展示实验中所涉及的示例输入和输出。
6:结论在这一节中,我们将总结本实验的设计和实现,并讨论所得实验结果的意义和潜在的改进方向。
7:附录本文档附带以下附件:- 代码实现:包含所设计数据结构的C语言源代码。
- 实验数据文件:包含用于测试数据结构的示例输入和输出文件。
8:法律名词及注释本文档中涉及的法律名词及注释见附件。
《数据结构》实验报告
实验序号:6 实验项目名称:树和二叉树的操作
1.#include <stdlib.h>
#include <stdio.h>
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiNode, *Bitree;
DLR( Bitree root )
{ if (root !=NULL) { //非空二叉树
printf("%d",root->data); //访问D
DLR(root->lchild); //递归遍历左子树
DLR(root->rchild); //递归遍历右子树}
return(0);
}
LDR(Bitree root)
{ if(root !=NULL)
{
LDR(root->lchild);
printf("%d",root->data);
LDR(root->rchild);
}
return(0);}
LRD (Bitree root)
{ if(root !=NULL) {
LRD(root->lchild);
LRD(root->rchild);
printf("%d",root->data);
}
return(0);
}
Bitree root;//定义根结点
void insert_data(int x) /*生成/树*/
{
Bitree p,q,s;
s=(Bitree)malloc(sizeof(BiNode)); //创建结点
s->data=x; //结点赋值
s->lchild=NULL;
s->rchild=NULL;
if(!root)
{
root=s;
}
else
{
p=root;
while(p) /*如何接入二叉排序树的适当位置*/
{
q=p;
if(p->data==x) //相同结点不能重复插入
{
printf("data already exist! \n");
return;
}
else if(x<p->data)
p=p->lchild;
else
p=p->rchild;
}
if(x<q->data)
q->lchild=s;
else
q->rchild=s;
}
}
void main() /*先生成二叉排序树*/
{
int i=1,x; //i记录结点个数,x存放结点值
root=NULL; /*千万别忘了赋初值给root!*/
printf("请输入数据,-9999表示输入结束\n");
do
{
printf("please input data %d:",i);
i++;
scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/
if(x==-9999){
printf("\nNow output data value:\n");
}
else
insert_data(x); /*调用插入数据元素的函数*/
}while(x!=-9999);
printf("\nDLR");
DLR(root);
printf("\nLDR");
LDR(root);
printf("\nLRD");
LRD(root);
}
2.
#include <stdlib.h>
#include <stdio.h>
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiNode, *Bitree;
Bitree root;//定义根结点
int CountLeaf (Bitree root)
{ //返回指针T所指二叉树中所有叶子结点个数
int m,n;
if (!root ) return 0;
if (!root->lchild && !root->rchild) return 1;
else {
m = CountLeaf( root->lchild); n = CountLeaf( root->rchild);
return (m+n);
} //else
} // CountLeaf
void insert_data(int x) /*生成/树*/
{
Bitree p,q,s;
s=(Bitree)malloc(sizeof(BiNode)); //创建结点
s->data=x; //结点赋值
s->lchild=NULL;
s->rchild=NULL;
if(!root)
{
root=s;
}
else
{
p=root;
while(p) /*如何接入二叉排序树的适当位置*/
{
q=p;
if(p->data==x) //相同结点不能重复插入
{
printf("data already exist! \n");
return;
}
else if(x<p->data)
p=p->lchild;
else
p=p->rchild;
}
if(x<q->data)
q->lchild=s;
else
q->rchild=s;
}
}
void main() /*先生成二叉排序树*/
{
int i=1,x; //i记录结点个数,x存放结点值
int sum;
root=NULL; /*千万别忘了赋初值给root!*/
printf("请输入数据,-9999表示输入结束\n");
do
{
printf("please input data %d:",i);
i++;
scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/
if(x==-9999){
printf("\nNow output data value:\n");
}
else
insert_data(x); /*调用插入数据元素的函数*/
}while(x!=-9999);
printf(" \n叶节点个数=");
sum=CountLeaf (root);
printf("%d\n",sum);
}【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章,期待你的好评和关注,我将一如既往为您服务】。