《数据结构》实训报告

合集下载

数据结构实验实训报告范文

数据结构实验实训报告范文

一、实验目的1. 理解并掌握数据结构的基本概念和常用算法。

2. 学会使用C语言实现线性表、栈、队列、树和图等基本数据结构。

3. 培养动手实践能力,提高编程水平。

二、实验内容1. 线性表(1)顺序表(2)链表2. 栈(1)顺序栈(2)链栈3. 队列(1)顺序队列(2)链队列4. 树(1)二叉树(2)二叉搜索树5. 图(1)邻接矩阵表示法(2)邻接表表示法三、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 编译器:Visual Studio 20194. 实验软件:C语言开发环境四、实验步骤1. 线性表(1)顺序表1)定义顺序表结构体2)实现顺序表的初始化、插入、删除、查找等基本操作3)编写测试程序,验证顺序表的基本操作(2)链表1)定义链表结构体2)实现链表的创建、插入、删除、查找等基本操作3)编写测试程序,验证链表的基本操作2. 栈(1)顺序栈1)定义顺序栈结构体2)实现顺序栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证顺序栈的基本操作(2)链栈1)定义链栈结构体2)实现链栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证链栈的基本操作3. 队列(1)顺序队列1)定义顺序队列结构体2)实现顺序队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证顺序队列的基本操作(2)链队列1)定义链队列结构体2)实现链队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证链队列的基本操作4. 树(1)二叉树1)定义二叉树结构体2)实现二叉树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉树的基本操作(2)二叉搜索树1)定义二叉搜索树结构体2)实现二叉搜索树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉搜索树的基本操作5. 图(1)邻接矩阵表示法1)定义邻接矩阵结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接矩阵表示法的基本操作(2)邻接表表示法1)定义邻接表结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接表表示法的基本操作五、实验结果与分析1. 线性表(1)顺序表实验结果表明,顺序表的基本操作实现正确,测试程序运行稳定。

数据结构实训总结

数据结构实训总结

数据结构实训总结数据结构是计算机科学中的重要概念,它涉及到数据的组织、存储和管理。

在数据结构的实训课程中,学生通过实践操作来加深对数据结构的理解和掌握。

本文将对数据结构实训进行总结,包括实训内容、实训过程、实训收获、实训问题和实训建议等方面。

一、实训内容1.1 排序算法:实现常见的排序算法,如冒泡排序、快速排序、插入排序等。

1.2 数据结构的实现:实现链表、栈、队列等数据结构,并进行相关操作。

1.3 树结构的应用:实现二叉树、二叉搜索树等树结构,并进行相关操作。

二、实训过程2.1 学习理论知识:在实训开始前,学生需要通过课堂学习来掌握数据结构的基本概念和算法原理。

2.2 编写代码实现:学生需要根据所学知识,使用编程语言来实现数据结构和算法。

2.3 调试和测试:完成代码编写后,学生需要进行调试和测试,确保程序能够正确运行并得到正确结果。

三、实训收获3.1 加深理解:通过实践操作,学生能够更深入地理解数据结构的原理和应用。

3.2 提升编程能力:实训过程中,学生需要不断编写代码实现算法,从而提升编程能力。

3.3 培养团队合作意识:在实训中,学生通常需要与同学合作完成任务,培养了团队合作意识。

四、实训问题4.1 理论与实践结合不足:有些学生在实训中只注重编程实现,而忽略了数据结构的理论知识。

4.2 编程能力不足:部分学生在实训中遇到困难,表现出编程能力不足的问题。

4.3 时间管理不当:有些学生在实训中时间规划不当,导致任务无法按时完成。

五、实训建议5.1 注重理论学习:在实训前应加强对数据结构理论知识的学习,为实践操作打下坚实基础。

5.2 多练习编程:通过不断练习编程,提升自己的编程能力,更好地应对实训任务。

5.3 合理规划时间:在实训过程中应合理规划时间,合理安排任务进度,避免出现时间不足的情况。

综上所述,数据结构实训是提升学生数据结构理论和实践能力的重要途径,通过实训的学习,学生能够更好地掌握数据结构的知识和应用,为将来的学习和工作打下坚实基础。

数据结构实训报告

数据结构实训报告

学生实训报告实训名称:数据结构实训指导教师::学号:班级:日期:一、实训项目项目名称:全国交通咨询模拟二、实训的目的1.熟悉图数据结构;2.掌握图的顺序存储结构—邻接表;3.掌握最短路径算法4.上机调试程序,掌握查错、排错使程序能正确运行。

三.实训要求1.每个人独立完成实训项目,相互之间可以交流,不能抄袭2.实训的成果包括程序代码和报告3.程序代码要有注释和说明三、实验的环境:1.硬件环境: PC机2.软件环环境:Windows2000 +Visual C++6四、算法描述:建立图的数据结构,采用邻接矩阵作为其存储结构。

存储以上的全国主要城市的交通信息。

通过软件模拟的方法实现:给定出发点和终点,求出它们之间的最短路径,并给出最短路径的线路。

五、源程序清单:#include <stdio.h>#include<string.h>#define VEX_NUM 26#define MAXINT 1000000typedef struct graph{char city[VEX_NUM][10];int arcs[VEX_NUM][VEX_NUM];}Mgraph;void CreatGraph(Mgraph *G,int e);void Dijkstra(Mgraph *Gn, int v0,int path[],int dist[]);void PutPath(Mgraph *g,int v0,int v1,int p[],int d[]);int index(char s[],Mgraph *g);void main(){Mgraph *g;int i;int e;int v0,v1;char sr[10],dt[10];int dist[VEX_NUM];int path[VEX_NUM];g=new Mgraph;CreatGraph(g,30);printf("输入出发城市和终点城市\n");getchar();gets(sr);v0=index(sr,g);gets(dt);v1=index(dt,g);Dijkstra(g,v0,path,dist);PutPath(g,v0,v1,path,dist);}void CreatGraph(Mgraph *G,int e){int i,j,k,cost;printf("输入城市名称\n");for(i=0;i<VEX_NUM;++i)scanf("%s",G->city[i]);for(i=0;i<VEX_NUM;i++)for(j=0;j<VEX_NUM;j++)G->arcs[i][j]=MAXINT;printf("输入城市之间的距离\n");for(k=0;k<e;k++){scanf("%d,%d,%d",&i,&j,&cost);G->arcs[i][j]=cost;G->arcs[j][i]=cost;}}void Dijkstra(Mgraph *Gn, int v0,int path[],int dist[]) {int s[VEX_NUM];int v;int w;int i,j,k;int min;for(v=0; v<VEX_NUM; v++){s[v]=0;dist[v]=Gn->arcs[v0][v];if(dist[v]<MAXINT)path[v]=v0;else path[v]=-1;}dist[v0]=0;s[v0]=1;for(i=1;i<VEX_NUM -1;i++){min=MAXINT;for(w=0;w<VEX_NUM;w++)if(!s[w] && dist[w]<min){v=w;min=dist[w];}s[v]=1;for(j=0;j<VEX_NUM;j++)if(!s[j] && (min+Gn->arcs[v][j]<dist[j])){dist[j]=min+Gn->arcs[v][j];path[j]=v;}}}void PutPath(Mgraph *g,int v0,int v1,int p[],int d[]) {int k;int next;int top=0;int st[20];if(d[v1]<MAXINT && v1!=v0){st[top++]=v1;next=p[v1];while(next!=v0){st[top++]=next;next=p[next];}}elseif(v1!=v0){printf("%s->%s:没有路径\n",g->city[v0],g->city[v1]);return;}st[top++]=v0;while(top){next=st[--top];if(top!=0)printf("%s->",g->city[next]);elseprintf("%s\n",g->city[next]);}printf("两个城市之间的最短距离为:%d\n",d[v1]);}int index(char s[],Mgraph *g){int i;for(i=0;i<VEX_NUM;i++)if(strcmp(s,g->city[i])==0)return i;}六、运行结果:七、实验运行情况分析(包括算法、运行结果、运行环境等问题的讨论)。

数据结构实训总结

数据结构实训总结

数据结构实训总结
引言概述:
数据结构是计算机科学中非常重要的一门课程,通过实训课程的学习和实践,我们能够更好地理解数据结构的原理和应用。

本文将总结数据结构实训课程的学习经验和收获,希翼对读者有所启示。

一、实践操作的重要性
1.1 实践操作能够加深对数据结构知识的理解
1.2 通过实践操作,能够更好地掌握数据结构的应用场景
1.3 实践操作可以匡助我们发现和解决数据结构中的问题和难点
二、算法设计的技巧
2.1 算法设计是数据结构实训中的重点内容
2.2 掌握算法设计的技巧可以提高解题效率
2.3 不断练习算法设计,可以提升自己的编程能力和思维逻辑
三、调试和优化的重要性
3.1 调试是解决数据结构实训中bug的关键
3.2 优化算法和代码可以提高程序的执行效率
3.3 调试和优化是数据结构实训中不可或者缺的环节,需要认真对待
四、团队合作的意义
4.1 数据结构实训通常是以小组形式完成的
4.2 团队合作可以促进成员之间的交流和学习
4.3 通过团队合作,可以更好地完成任务和提升整体效率
五、总结与展望
5.1 总结数据结构实训的收获和经验,为今后的学习和工作提供参考
5.2 展望未来,继续学习和深化对数据结构的理解
5.3 坚持不懈,不断提升自己的编程能力和算法水平,为未来的发展打下坚实基础。

通过对数据结构实训的总结,我们可以更好地认识到数据结构在计算机科学中的重要性,同时也能够不断提升自己的编程能力和算法水平。

希翼每位同学在今后的学习和工作中能够不断进步,实现自身的价值。

数据结构实训实验报告

数据结构实训实验报告

一、实验背景数据结构是计算机科学中一个重要的基础学科,它研究如何有效地组织和存储数据,并实现对数据的检索、插入、删除等操作。

为了更好地理解数据结构的概念和原理,我们进行了一次数据结构实训实验,通过实际操作来加深对数据结构的认识。

二、实验目的1. 掌握常见数据结构(如线性表、栈、队列、树、图等)的定义、特点及操作方法。

2. 熟练运用数据结构解决实际问题,提高算法设计能力。

3. 培养团队合作精神,提高实验报告撰写能力。

三、实验内容本次实验主要包括以下内容:1. 线性表(1)实现线性表的顺序存储和链式存储。

(2)实现线性表的插入、删除、查找等操作。

2. 栈与队列(1)实现栈的顺序存储和链式存储。

(2)实现栈的入栈、出栈、判断栈空等操作。

(3)实现队列的顺序存储和链式存储。

(4)实现队列的入队、出队、判断队空等操作。

3. 树与图(1)实现二叉树的顺序存储和链式存储。

(2)实现二叉树的遍历、查找、插入、删除等操作。

(3)实现图的邻接矩阵和邻接表存储。

(4)实现图的深度优先遍历和广度优先遍历。

4. 算法设计与应用(1)实现冒泡排序、选择排序、插入排序等基本排序算法。

(2)实现二分查找算法。

(3)设计并实现一个简单的学生成绩管理系统。

四、实验步骤1. 熟悉实验要求,明确实验目的和内容。

2. 编写代码实现实验内容,对每个数据结构进行测试。

3. 对实验结果进行分析,总结实验过程中的问题和经验。

4. 撰写实验报告,包括实验目的、内容、步骤、结果分析等。

五、实验结果与分析1. 线性表(1)顺序存储的线性表实现简单,但插入和删除操作效率较低。

(2)链式存储的线性表插入和删除操作效率较高,但存储空间占用较大。

2. 栈与队列(1)栈和队列的顺序存储和链式存储实现简单,但顺序存储空间利用率较低。

(2)栈和队列的入栈、出队、判断空等操作实现简单,但需要考虑数据结构的边界条件。

3. 树与图(1)二叉树和图的存储结构实现复杂,但能够有效地表示和处理数据。

数据结构实训报告总结

数据结构实训报告总结

数据结构实训报告总结在数据结构实训中,我们学习了各种常用的数据结构及其相关算法,并通过实践应用了这些知识。

本文将对实训内容进行总结,包括学习的主要内容、实践中遇到的问题以及所得到的收获和体会。

一、学习内容概述在实训中,我们学习了线性表、栈、队列、树、图等数据结构的基本概念和常用算法。

通过理论学习和实践编程,我们对这些数据结构的特点、操作和应用有了更深入的了解。

同时,我们还学习了算法的时间复杂度和空间复杂度的分析方法,能够对算法的效率进行评估和优化。

二、实践中遇到的问题及解决方案在实训过程中,我们遇到了一些问题,如如何选择合适的数据结构、如何设计高效的算法等。

针对这些问题,我们采取了以下解决方案:1. 选择合适的数据结构:根据问题的需求和特点,我们仔细分析了不同数据结构的优缺点,并选择了最合适的数据结构来解决问题。

例如,对于需要频繁插入和删除元素的场景,我们选择了链表作为数据结构。

2. 设计高效的算法:在解决问题时,我们注意算法的时间复杂度和空间复杂度,尽量选择高效的算法。

例如,在排序算法中,我们选择了快速排序算法,其时间复杂度为O(nlogn),比冒泡排序的O(n^2)要高效。

三、收获和体会通过这次实训,我们收获了以下几个方面的经验和体会:1. 理论联系实际:通过实践应用数据结构和算法,我们更加深入地理解了它们的实际应用。

我们发现,数据结构和算法是解决实际问题的重要工具,能够提高程序的效率和性能。

2. 团队合作能力:在实训过程中,我们需要与团队成员合作完成编程任务。

通过团队合作,我们学会了有效地分工合作、沟通协调,并通过相互学习和讨论提高了自己的编程能力。

3. 解决问题的能力:在实践中,我们遇到了各种问题,如代码bug、算法优化等。

通过不断思考和尝试,我们学会了独立解决问题的能力,并提高了自己的编程思维和调试技巧。

4. 抽象思维能力:在设计数据结构和算法时,我们需要进行抽象思维,将问题抽象为适合的数据结构和算法。

数据结构创建实训总结报告

一、引言随着计算机技术的飞速发展,数据结构作为计算机科学的基础课程,越来越受到重视。

为了提高学生的实践能力和创新能力,本人在数据结构课程中进行了创建实训,通过实际操作,加深了对数据结构理论知识的理解,锻炼了编程能力。

以下是对本次实训的总结。

二、实训目标1. 熟悉数据结构的基本概念和常用数据结构,如线性表、栈、队列、树、图等;2. 掌握常用数据结构的创建、插入、删除、遍历等基本操作;3. 培养学生运用数据结构解决实际问题的能力;4. 提高学生的编程能力和团队协作能力。

三、实训内容1. 线性表线性表是数据结构中最基本、最简单的一种数据结构,主要包括顺序表和链表。

在实训中,我实现了顺序表和链表的创建、插入、删除、遍历等基本操作。

2. 栈栈是一种后进先出(LIFO)的数据结构,主要应用于需要先入后出的场景。

在实训中,我实现了栈的创建、入栈、出栈、遍历等基本操作。

3. 队列队列是一种先进先出(FIFO)的数据结构,主要应用于需要先入先出的场景。

在实训中,我实现了队列的创建、入队、出队、遍历等基本操作。

4. 树树是一种层次结构,具有明显的层次关系。

在实训中,我实现了二叉树的创建、插入、删除、遍历等基本操作。

5. 图图是一种非线性数据结构,主要用于表示实体之间的复杂关系。

在实训中,我实现了图的创建、添加边、删除边、遍历等基本操作。

四、实训过程1. 理论学习:在实训前,我对数据结构的基本概念和常用数据结构进行了深入学习,为实训奠定了理论基础。

2. 编程实践:根据实训内容,我使用C语言编写了各个数据结构的实现代码,并在实际操作中不断优化和改进。

3. 团队协作:在实训过程中,我与团队成员密切配合,共同完成实训任务。

在遇到问题时,我们互相讨论、共同解决,提高了团队协作能力。

4. 总结反思:在实训结束后,我对实训过程中遇到的问题和不足进行了总结,为今后的学习和实践积累了经验。

五、实训成果1. 掌握了常用数据结构的创建、插入、删除、遍历等基本操作;2. 提高了编程能力和问题解决能力;3. 培养了团队协作和沟通能力;4. 加深了对数据结构理论知识的理解。

数据结构实训报告【范本模板】

《数据结构与算法分析》课程设计题目:文字处理程序(字符串的应用)学生姓名:林武祥学号:16230243008专业班级: B16软件工程1班指导教师:颜慧学院: 大数据与计算机学院2017年12月目录一、课程设计题目 (1)二、开发背景 (1)三、项目总体设计 (1)3.1需求分析 (1)3.2系统功能模块设计 (1)四、详细实现步骤和流程图 (2)4.1功能实现展示 (2)4.2流程图框架 (4)五、部分具体代码分析及实现 (5)六、项目总结 (9)七、参考文献 (9)一、课程设计题目文字处理程序(字符串的应用)及简单文本编辑器二、开发背景由于对于现在的电脑族对电脑的使用频率逐年增大,对电脑的需要具有依赖性.其中不乏有对文本的编辑的需求,因此,本次实训周做了一款简单的文本编辑器的应用程序,对文本编辑器的相关功能做了一定的实现,既简单又实用。

本软件为一个简单而且很实用的文本编辑的工具,不但可以进行一些文字的输入和文本的读取,而且,该文本编辑器也可以对文本进行一些保存、另存、剪切、粘贴、删除等常规的操作,是一款比较适合广大普通用户和非计算机专业的用户和文本编辑的处理软件,本软件不但界面友好,功能齐全,而且操作简单。

三、项目总体设计3.1需求分析文字处理程序运行后弹出文本编辑器的主界面,由键盘输入或以打开的方式输入或显示文本文件内容。

其中程序基本操作:包括文本的复制、粘贴、剪切、删除、查找、替换等功能。

统计功能:分别统计出文本文件中的各类字符的个数,包括英文字母个数、空格个数、汉字个数、标点符号个数、总字数等并显示统计信息;允许用户统计某一字符串在文章中出现的次数,并显示统计信息;加密和解密:用户可对指定文本文件进行加密和解密操作;用户可保存该文件.3。

2系统功能模块设计四、详细实现步骤和流程图4.1功能实现展示运行主界面打开文件夹输入字体界面另存为加密保存保存结果字母数字空格汉字符号统计复制、粘贴、剪贴和全选功能4.2流程图框架文本编辑器文件编辑五、部分具体代码展示及实现字母数字空格汉字符号统计public class CheckThread extends Thread {private JTextPane textPane ; private JLabel label ;public CheckThread(JTextPane textPane , JLabel label ){ this 。

数据结构实验实训总结报告

一、实验背景随着计算机技术的飞速发展,数据结构作为计算机科学的重要基础,已经成为现代软件开发和数据处理的关键技术。

为了提高学生的数据结构应用能力,我们学校开设了数据结构实验实训课程。

本课程旨在通过实验实训,使学生深入理解数据结构的基本概念、性质、应用,掌握各种数据结构的实现方法,提高编程能力和解决实际问题的能力。

二、实验内容本次数据结构实验实训主要包括以下内容:1. 数据结构的基本概念和性质通过实验,使学生掌握线性表、栈、队列、串、树、图等基本数据结构的概念、性质和应用场景。

2. 数据结构的存储结构通过实验,使学生熟悉线性表、栈、队列、串、树、图等数据结构的顺序存储和链式存储方法,了解不同存储结构的优缺点。

3. 数据结构的操作算法通过实验,使学生掌握线性表、栈、队列、串、树、图等数据结构的插入、删除、查找、遍历等基本操作算法。

4. 数据结构的实际应用通过实验,使学生了解数据结构在各个领域的应用,如网络数据结构、数据库数据结构、人工智能数据结构等。

三、实验过程1. 实验准备在实验开始前,教师首先对实验内容进行讲解,使学生了解实验目的、实验步骤和实验要求。

同时,教师要求学生预习实验内容,熟悉相关理论知识。

2. 实验实施(1)线性表:通过实现线性表的顺序存储和链式存储,实现插入、删除、查找等操作。

(2)栈和队列:通过实现栈和队列的顺序存储和链式存储,实现入栈、出栈、入队、出队等操作。

(3)串:通过实现串的顺序存储和链式存储,实现串的插入、删除、查找等操作。

(4)树:通过实现二叉树、二叉搜索树、平衡二叉树等,实现树的插入、删除、查找、遍历等操作。

(5)图:通过实现图的邻接矩阵和邻接表存储,实现图的插入、删除、查找、遍历等操作。

3. 实验总结实验结束后,教师组织学生进行实验总结,总结实验过程中的收获和不足,提出改进措施。

四、实验成果通过本次数据结构实验实训,学生取得了以下成果:1. 掌握了数据结构的基本概念、性质和应用场景。

实训报告数据结构项目分析

一、项目背景随着计算机技术的飞速发展,数据结构作为计算机科学的基础课程,其重要性日益凸显。

为了提高学生对数据结构的理解和应用能力,我们开展了本次数据结构实训项目。

本项目旨在通过实际操作,让学生深入理解各种数据结构的原理和特点,掌握其应用方法,并能结合实际需求进行数据结构的选型和设计。

二、项目目标1. 掌握常见数据结构的原理和特点,如线性表、栈、队列、链表、树、图等。

2. 学会使用C语言等编程语言实现常见数据结构的操作。

3. 培养学生的逻辑思维能力和编程能力。

4. 提高学生对数据结构在实际应用中的分析和解决能力。

三、项目内容本项目分为以下几个部分:1. 线性表线性表是最基本的数据结构之一,包括顺序表和链表。

我们首先实现了顺序表的插入、删除、查找等基本操作,然后实现了链表的创建、插入、删除、查找等操作。

在实训过程中,我们对比了顺序表和链表的优缺点,让学生了解不同数据结构在实际应用中的适用场景。

2. 栈和队列栈和队列都是操作受限的线性表。

我们实现了栈的入栈、出栈、判空、判满等操作,以及队列的入队、出队、判空、判满等操作。

通过实训,学生掌握了栈和队列在实际应用中的场景,如递归算法、模拟排队等。

3. 链表链表是一种动态数据结构,其优点是插入和删除操作灵活,空间利用率高。

我们实现了单链表、双向链表和循环链表,并实现了插入、删除、查找等操作。

在实训过程中,学生深入理解了链表的数据结构和操作方法。

4. 树和图树是一种非线性数据结构,具有层次结构。

我们实现了二叉树、二叉搜索树、平衡二叉树等,并实现了插入、删除、查找等操作。

图是一种复杂的数据结构,包括无向图和有向图。

我们实现了邻接矩阵和邻接表两种表示方法,并实现了图的遍历、最短路径等操作。

5. 应用实例为了让学生更好地理解数据结构在实际应用中的价值,我们选取了以下几个实例进行分析:(1)快速排序:通过使用链表实现快速排序算法,提高了排序效率。

(2)搜索引擎:利用图结构实现搜索引擎的索引构建和搜索算法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实训报告 实验一 线性表 1. 实验要求 1.1 掌握数据结构中线性表的基本概念。 1.2 熟练掌握线性表的基本操作:创建、插入、删除、查找、输出、求长度及合并并运算在顺序存储结构上的实验。 1.3 熟练掌握链表的各种操作与应用。 2. 实验内容 2.1 编写一个函数,从一个给定的顺序表A中删除元素值在x到y之间的所有元素,要求以较高效率来实现。 2.2 试写一个算法,在无头结点的动态单链表上实现线性表插入操作 2.3 设计一个统计选票的算法,输出每个候选人的得票结果。

3. 实验代码 2、1代码: #include typedef int elemtype; #define maxsize 10 int del(int A[],int n,elemtype x,elemtype y) { int i=0,k=0; while(i{if(A[i]>=x&&A[i]<=y) k++; else A[i-k]=A[i]; i++; } return(n-k); } void main() { int i,j; int a[maxsize]; printf("输入%d个数:\n",maxsize); for(i=0;iscanf("%d,",&a[i]); 《数据结构》实训报告 j=del(a,maxsize,1,3); printf("输出删除后剩下的数:\n"); for(i=0;iprintf("%d "\n,a[i]); }

2、2代码: INSERT(L,i,b)。 void Insert(Linklist &L,int i,elemtype x) { if(!L) { L=(Linklist)malloc(sizeof(Lnode)); (*L)、data=x;(*L)、next=NULL; } else { if(i==1) { s=(Linklist)malloc(sizeof(Lnode)); s->data=x;s->next=L;L=s; } else { p=L;j=1; while(p&&j{j++;p=p->next;} if(p||j>i-1) return error; s=(Linklist)malloc(sizeof(Lnode)); s->data=x;s->next=p->next;p->next=s; } } }

2、3代码: typedef int elemtype typedef struct linknode { elemtype data; struct linknode *next; }nodetype; 《数据结构》实训报告 nodetype *create() { elemtype d; nodetype h=NULL,*s,*t; int i=1; printf("建立单链表:\n"); while(1) { printf("输入第%d个结点数据域",i); scanf("%d",&d); if(d==0)break; if(i==1) { h=(nodetype *)malloc(sizeof(nodetype)); h->data=d;h->next=NULL;t=h; } else { s=(nodetype *)malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s; } i++; } return h; }

void sat(nodetype *h,int a[]) { nodetype *p=h; while(p!=NULL) { a[p->data]++; p=p->next; } } void main() { int a[N+1],i; for(i=0;ia[i]=0; nodetype *head; head=create(); sat(head,a); 《数据结构》实训报告 printf("候选人:"); for(i=1;i<=N;i++) printf("%3d",i); printf("\n得票数\n"); for(i=1;i<=N;i++) printf("%3d",a[i]); printf("\n"); }

4. 实验小结 线性表就是最简单的、最常用的一种数据结构,就是实现其她数据结构的基础。

实验二 栈与队列 1. 实验要求

1.1 了解栈与队列的特性,以便灵活运用。 1.2 熟练掌握栈与有关队列的各种操作与应用。 2. 实验内容

2.1 设一个算术表达式包括圆括号,方括号与花括号三种括号,编写一个算法判断其中的括号就是否匹配。 3. 实验代码

2、1代码: #include #include #include #define NULL 0 typedef struct list { char str; struct list *next; }list; void push(char,list *); int pop(char、list *); void deal(char *str); main(void) { char str[20]; 《数据结构》实训报告 printf("\n请输入一个算式:\n"); gets(str); deal(str); printf("正确!"); getchar(); return 0; } void deal(char *str) { list *L; L=(list *)malloc(sizeof(list)); if(!L) { printf("错误!"); exit(-2); } L->next=NULL; while(*str) { if(*str=='('||*str=='['||*str=='{') push(*str,L); else if(*str==')'||*str==']'||*str=='}') if(pop(*str,L)) {puts("错误,请检查!"); puts("按回车键退出"); getchar();exit(-2); } str++; } if(L->next) { puts("错误,请检查!"); puts("按任意键退出"); getchar();exit(-2); } } void push(char c,list *L) { list *p; p=(list *)malloc(sizeof(list)); if(!p) { printf("错误!"); 《数据结构》实训报告 exit(-2); } p->str=c; p->next=L->next; L->next=p; } #define check(s) if(L->next->str==s){p=l->next;L->next=p->next;free(p);return(0);} int pop(char c,list *L) { list *p; if(L->next==NULL)return 1; switch(c) { case')':check('(') break; case']':check('[') break; case'}':check('{') break; } return 1;

4. 实验小结 栈与队列就是最基础的一种数据结构之一,为实现其她数据结构的奠定基石。

实验三 树 1. 实验要求 1.1 掌握二叉树,二叉树排序数的概念与存储方法。 1.2 掌握二叉树的遍历算法。 1.3 熟练掌握编写实现树的各种运算的算法。 2. 实验内容 2.1 编写程序,求二叉树的结点数与叶子数。 2.2 编写递归算法,求二叉树中以元素值为X的结点为根的子数的深度。 2.3 编写程序,实现二叉树的先序,中序,后序遍历,并求其深度。 《数据结构》实训报告 3. 实验代码 2、1代码: #include #include struct node{ char data; struct node *lchild,*rchild; }bnode; typedef struct node *blink; blink creat() { blink bt; char ch; ch=getchar(); if(ch==' ') return(NULL); else { bt=(struct node *)malloc(sizeof(bnode)); bt->data=ch; bt->lchild=creat(); bt->rchild=creat(); } return bt; } int n=0,n1=0; void preorder(blink bt) { if (bt) { n++; if(bt->lchild==NULL&&bt->rchild==NULL) n1++; preorder(bt->lchild); preorder(bt->rchild); } } void main() { blink root; root=creat(); preorder(root); printf("此二叉数的接点数有:%d\n",n); printf("此二叉数的叶子数有:%d\n",n1);}

相关文档
最新文档