数据结构实验指导书(2012.9)
数据结构实验-实验指导书
实验一线性表操作一、实验目的1熟悉并掌握线性表的逻辑结构、物理结构。
2熟悉并掌握顺序表的存储结构、基本操作和具体的函数定义。
3熟悉VC++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。
4熟悉VC++操作环境的使用以及多文件的输入、编辑、调试和运行的全过程。
二、实验要求1实验之前认真准备,编写好源程序。
2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。
3不断积累程序的调试方法。
三、实验内容基本题:1对元素类型为整型的顺序存储的线性表进行插入、删除和查找操作。
加强、提高题:2、编写一个求解Josephus问题的函数。
用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人。
然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。
最后分析所完成算法的时间复杂度。
定义JosephusCircle类,其中含完成初始化、报数出圈成员函数、输出显示等方法。
(可以选做其中之一)加强题:(1)采用数组作为求解过程中使用的数据结构。
提高题:(2)采用循环链表作为求解过程中使用的数据结构。
运行时允许指定任意n、s、m数值,直至输入n = 0退出程序。
实验二栈、队列、递归应用一、实验目的1熟悉栈、队列这种特殊线性结构的特性2熟练掌握栈、队列在顺序存储结构和链表存储结构下的基本操作。
二、实验要求1实验之前认真准备,编写好源程序。
2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。
3不断积累程序的调试方法。
三、实验内容基本题(必做):1分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。
2、假设以带头结点的循环链表表示队列,并且只设一个指针指向对尾结点,不设头指针,试设计相应的置队空、入队和出队的程序。
加强题:3设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx都是中心对称的字符串。
《数据结构》实验指导书
《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课,上机实习是对学生的一种全面综合训练,是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合,使学生学会把学到的知识用于解决实际问题,起到深化理解和灵活掌握教学内容的目的。
同时,通过本课程的上机实习,使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1.简要描述题目要求,对问题的描述应避开算法及所涉及的数据类型,只是对所需完成的任务做出明确的陈述,例如输入数据的类型、值的范围以及输入的形式,输出数据的类型、值的范围以及输出的形式。
2.选定数据结构,写出算法,根据自顶向下发展算法的方法,首先描述算法的基本思想,然后进行算法细化,再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3.准备好上机所需的程序,选定一种程序设计语言(如C语言),手工编好上机程序,并进行反复检查,使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方,应做出标记,以便在上机时给予注意。
4.上机输入和调试程序,在调试程序过程中除了系统的问题以外,一般应自己独立解决。
在程序调试通过后,打印输出程序清单和运行结果。
5.上机结束后,总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么,并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
5.分析程序的优缺点、时空性能以及改进思想,写出心得体会。
实验一线性表一.目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。
要求仔细阅读并理解下列例题,上机通过,并观察其结果,然后独立完成后面的实习题。
二.例题[问题描述]用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。
《数据结构》实验指导书 2012最新版
目录实验一线性表基本操作的编程实现 (1)实验二堆栈或队列基本操作的编程实现 (8)实验三串基本操作的编程实现 (14)实验四二维数组基本操作的编程实现 (18)实验五二叉树基本操作的编程实现 (20)实验六图基本操作的编程实现 (33)实验七查找技术的编程实现 (43)实验八排序技术的编程实现 (49)附录一实验常见问题问答 (56)附录二如何准备实验 (56)附录三如何写实验报告 (57)附录四实验报告书写标准 (57)(特别提示:程序设计包含两个方面的错误。
其一是语法错误,其二是功能错误。
为了提高学生的编程和调试能力,本指导书给出的程序代码并不保证没有上述的两种错误。
并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的教学要求。
希望大家以自己所学高级语言的基本功和数据结构原理的思考点为基础,不要过于依赖给出的参考代码,这样才能有所进步。
如果学生能够根据要求完全自己编制,那就更好了。
)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构要求是链表存储结构(顺序存储结构建议作为课外实验完成),可以依次完成主要功能来体现功能的正确性,用菜单进行管理完成大部分功能,要求可以重复运行。
还鼓励学生利用基本操作进行一些更实际的应用型程序设计。
【实验性质】验证性实验(学时数:2H)【实验内容】1.线性表的链表存储,实现数据插入、删除运算。
为了体现功能的正常性,同时要编制数据输入函数和遍历函数,数据输入可以用1.键盘输入 2.内部预置数据 3.计算机自动给出 4.文件读入。
最好同时提供多种方式。
2.其他建议改进的功能或细节:存储结构修改为循环链表、双向链表、双向循环链表、静态链表等。
3.实验要求带头结点,提高编程能力可以把头结点故意去掉,看看那些语句有变化,编程增加了多少工作量。
数据结构实验指导书
数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。
具体而言,实验的目的包括:1、加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解,掌握其特点和操作方法。
2、培养学生运用数据结构解决实际问题的能力,提高算法设计和程序实现的能力。
3、增强学生的逻辑思维能力和调试程序的能力,培养学生的创新意识和团队合作精神。
二、实验环境1、操作系统:Windows 或 Linux 操作系统。
2、编程语言:C、C++、Java 等编程语言中的一种。
3、开发工具:如 Visual Studio、Eclipse、Code::Blocks 等集成开发环境(IDE)。
三、实验要求1、实验前,学生应认真预习实验内容,熟悉相关的数据结构和算法,编写好实验程序的代码框架。
2、实验过程中,学生应独立思考,认真调试程序,及时记录实验过程中出现的问题及解决方法。
3、实验完成后,学生应撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、问题分析与解决等。
四、实验内容(一)线性表1、顺序表的实现与操作实现顺序表的创建、插入、删除、查找等基本操作。
分析顺序表在不同操作下的时间复杂度。
2、链表的实现与操作实现单链表、双向链表的创建、插入、删除、查找等基本操作。
比较单链表和双向链表在操作上的优缺点。
(二)栈和队列1、栈的实现与应用实现顺序栈和链式栈。
利用栈解决表达式求值、括号匹配等问题。
2、队列的实现与应用实现顺序队列和链式队列。
利用队列解决排队问题、广度优先搜索等问题。
(三)树1、二叉树的实现与遍历实现二叉树的创建、插入、删除操作。
实现二叉树的前序、中序、后序遍历算法,并分析其时间复杂度。
2、二叉搜索树的实现与操作实现二叉搜索树的创建、插入、删除、查找操作。
分析二叉搜索树的性能。
(四)图1、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。
数据结构实验指导书
数据结构实验指导书实验1:顺序表基本操作一、实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。
3.掌握对多函数程序的输入、编辑、调试和运行过程。
二、实验要求1.预习C语言中结构体的定义与基本操作方法。
2.对顺序表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容:1.编写程序实现顺序表的下列基本操作:(1)初始化顺序表La。
(2)将La置为空表。
(3)销毁La。
(4)在La中插入一个新的元素。
(5)删除La中的某一元素。
(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。
(7)打印输出La中的元素值。
2.编写程序完成下面的操作:(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。
(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。
(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。
四、思考与提高假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B ?一、实验目的1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。
2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。
二、实验要求1.预习C语言中结构体的定义与基本操作方法。
2.对单链表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容1.编写程序完成单链表的下列基本操作:(1)初始化单链表La。
(2)在La中插入一个新结点。
(3)删除La中的某一个结点。
(4)在La中查找某结点并返回其位置。
《数据结构》实验指导书
数据结构实验课程大纲本大纲是针对计算机科学与技术专业本科对数据结构的基本要求而编写的。
一、目的与任务数据结构是一门实践性很强的课程,每个学生必须完成一定数量的上机作业。
通过上机作业,要求在数据结构的逻辑特性和存贮表示、基本数据结构的选择和应用、算法设计及其实现等方面加深对课程基本内容的理解。
同时,在程序设计方法、程序设计风格及上机操作等基本技能和科学作风方面受到比较系统的、严格的训练。
提高分析问题和用计算机解决实际问题的能力。
为后续课程的学习以及为应用软件特别是非数值软件的开发打下良好的理论基础和实践基础。
二、课程内容1.顺序表的表示和运算(0-2学时)2.链表的表示和运算(2学时)3.栈的应用(2-3学时)4.队列的应用(2-3学时)5.二叉树的基本操作和应用(2-6学时)6.图及其应用(2-6学时)7.排序(4-6学时)8.查找(2-4学时)三、基本要求1.逐步理解和掌握程序设计和上机操作的基本方法和技能。
2.理解并实现各种基本数据结构的存贮表示、运算方法及其典型应用;学会根据实际问题的要求设计算法的数据结构,并具有一定的比较和选用数据结构及算法的能力。
3.理解并实现常用的查找和排序的基本方法。
四、学时分配五、实验内容注:带*的内容以及练习与思考题,可根据实际学时、专业方向特点等具体要求,做相应调整或从略。
实验一、顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。
实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。
(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。
(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。
(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。
要求尽可能少地修改前面的程序来得到新程序。
数据结构课程实验指导书
《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。
本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。
数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。
通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。
二、实验前的准备工作1.每个学生需配备一台计算机,操作系统需Windows2000/XP以上版本,软件需Visual C++6.0以上版本。
2.实验前要求学生按实验要求编写好相关实验程序,准备上机调试运行。
三、实验的步骤(一)建立一个文件夹,如“数据结构”,用来存放自己的所有实验程序,在该文件夹中建立子目录用来存放每个项目(一个子目录一个项目),如“顺序表”,项目中需要的所有文件都存在该文件夹中。
(二)新建一个项目文件1.双击Visual C++ 6.0快捷图标,进入Visual C++ 6.0集成开发环境;或者点击“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”进入Visual C++ 6.0集成开发环境。
2.单击“File”菜单,选择“New”命令3.创建一个项目文件并保存在项目所在文件夹中;3. 创建源程序文件并保存在项目所在文件夹中;4.输入源程序;5.单击“保存”按钮保存源程序。
《数据结构》实训指导书
《数据结构》实训指导书实训一线性表基本操作算法设计一、实训目的与要求1、掌握线性表的顺序存储结构的实现及其基本操作的算法设计;2、掌握线性表的链式存储结构的实现及其基本操作的算法设计;3、掌握算法转化为C程序的方法。
二、实训内容1、根据线性表L=(a,b,c,d,e,f),编写程序建立其顺序存储结构并完成插入或删除操作。
2、根据线性表L=(a,b,c,d,e,f),编写程序建立其链式存储结构并完成插入或删除操作。
三、实训步骤1、根据算法设计编写源程序;2、输入并编辑源程序;3、运行并分析程序;四、实训总结与体会[根据本次实训过程,总结你对线性表基本操作算法设计的基本体会]实训二栈和队列基本操作的算法设计一、实训目的与要求1、掌握栈的基本操作算法设计的实现;2、掌握队列的基本操作算法设计的实现。
二、实训内容1、根据栈S=(a,b,c,d,e),建立其顺序存储结构或链式存储结构,并完成对该栈的进栈或出栈操作;2、根据队列Q=(a,b,c,d,e),建立其顺序存储结构或链式存储结构,并完成对该队列的进队或出队操作;三、实训步骤1、根据算法编写源程序;2、输入并编辑源程序;3、调试、分析程序。
四、实训总结[根据本次实训内容和过程,总结你对栈、队列的基本操作算法设计的体会]实训三二叉树的遍历算法设计一、实训目的与要求1、掌握二叉树的链式存储结构的算法实现;2、掌握遍历二叉树的算法实现。
二、实训内容1、根据算法编写程序建立下图所示二叉树的链式存储结构(建立二叉链表);2、根据算法编写程序完成对该二叉树的中序遍历(或先序遍历、后序遍历)。
三、实训步骤1、根据算法编写程序;2、输入并编辑程序;3、运行并分析程序。
四、实训总结与体会【根据本次实训内容及过程,简述对二叉树存储结构的实现及遍历二叉树算法设计的体会】实训四图的存储及遍历算法设计一、实训目的与要求1、掌握图的邻接矩阵、邻接表存储结构的算法实现;2、掌握图的遍历算法设计。
数据结构实验指导2012
数据结构实验指导本部分为读者设置了九个实验,读者可根据需要选做。
每个实验都分为两部分内容:实验内容和实验题目,实验内容是引导读者有效地掌握相关章节的算法,而实验题目则要求读者独立完成。
本书中所有结构的数据域部分均以整型数据或字符型示例,读者可根据需要自己调整实际数据类型。
一、实验要求(1)上实验以前应该明确当次实验的目的,阅读实验内容,写好实验题目程序清单。
(2)实验环境可用Turboc2.0或者Turboc3.0,要求读者事先复习好编译环境的使用方法,在实验时把主要精力放在算法设计上,而不是放在程序调试上。
(3)实验结束要书写实验报告。
(4)充分利用上机时间,提高上机效率。
二、实验报告的内容实验报告要包括以下几部分:(5)实验目的。
(6)实验内容。
(7)实验题目清单及必要的注释。
(8)程序的运行结果。
(9)实验总结(实验结果的分析,自己的经验及不足等)。
实验一线性结构的操作实验1.1 顺序表的插入和删除的实现一、实验目的:掌握线性表的顺序存储结构的实现方法,能够实现顺序表插入和删除的程序。
二、实验内容:建立一个顺序表(有n个数据结点),输入n个数据值,并能够完成在第i个结点之前插入数据e的操作。
1进入visual c++6.0集成环境。
2书写程序清单。
注意如下问题。
插入函数的实现。
插入之后线性表如何输出,插入成功与否如何表示。
3调试程序,运行,输入数据。
注意应输入一些边界数据和一些非法数据以证明算法的健壮性。
三、实验题目:参照实验内容的方法,实现顺序表的删除。
附:实验内容的程序清单。
#include "stdio.h"typedef int status;typedef struct{int *elem;int length;int listsize;}Sqlist;status Create_sq(Sqlist *L,int n){int i;L->elem=(int *)malloc(100*sizeof(int));if(!L->elem) return 0;for(i=0;i<n;i++)scanf("%d", &(L->elem[i]));/*输入n个数据值*/L->length=n;L->listsize=100;return 1;}status Listinsert_sq(Sqlist *L,int i,int e){int *q,*p, *newbase;if(i<1||i>L->length+1) return 0;if(L->length>=L->listsize){newbase=(int *)realloc(L->elem,(L->listsize+10)*sizeof(int));if(!newbase) exit(-2);L->elem=newbase;L->listsize+=10;}q=&(L->elem[i-1]);for(p=&(L->elem[L->length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L->length;return 1;}main(){Sqlist L1;int j,n,a;int i,e;printf("\n please input the number of data:\n");scanf("%d",&n);if(Create_sq(&L1,n)==1){scanf("%d%d",&i,&e);/*输入i为插入位置,e为要插入元素的数值)*/ a=Listinsert_sq(&L1,i,e);if(a==1)printf("insert success\n");elseprintf("insert false\n");printf("the list elements are:\n");for(i=1;i<=L1.length;i++){printf("%d\t",L1.elem[i-1]);}}}实验1.2 单链表插入和删除的实现一、实验目的:掌握线性表的链式存储结构的实现方法,能够实现单链表插入和删除的程序。
《数据结构》实验指导书
二、实验目的
1.掌握二叉树的存储实现
2.掌握二叉树的遍历思想
3.掌握二叉树的常见算法的程序实现
三、实验内容
1.编写函数,输入字符序列,建立二叉树的二叉链表。
2.编写函数,实现二叉树的中序递归遍历算法。(最好也能实现前缀和后缀遍历算法)
3.编写函数,实现二叉树的中序非递归遍历算法。
3.编写函数,在顺序表中进行顺序查找某一元素,查找成功则返回其存储位置i,否则返回错误信息。
4.编写函数,实现在顺序表的第i个位置上插入一个元素x的算法。
5.编写函数,实现删除顺序表中第i个元素的算法。
ቤተ መጻሕፍቲ ባይዱ6.编写利用有序表插入算法建立一个有序表的函数。
7.编写函数,利用以上算法,建立两个非递减有序表,并把它们合并成一个非递减有序表。
} TSMatrix;
五、注意问题
1.首先应输入矩阵的行数和列数,并判别给出的两个矩阵的行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和列数均不超过20。
2.程序可以对三元组的输入顺序加以限制,例如,按行优先,以便提高计算效率。
3.在用三元组表示稀疏矩阵时,相加或相减所得结果矩阵应该另生成,乘积矩阵也可用二维数组存放。
本实验指导书的内容都是基于C语言的,因此,要求学生对C语言要有一定的了解。建议使用Turbo C 2.0或VC++作为实验平台。根据学生的实际情况,本上机实验指导书的内容大多数为基本算法的综合验证,也包括部分算法设计。本上机实验指导书共有9个实验内容,每个实验约为4课时。
由于作者对《数据结构》知识所知有限,书中难免存在错误,恳请读者及时加以指正,以便改进。如有对于本书的意见和建议,请与编者联系,E-mail:lg@。衷心感谢!
《数据结构》实验指导书(新教学计划)
数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)实验题目 (3)实验一单链表的插入、删除 (3)[实验目的] (3)[实验内容] (3)[测试数据] (3)[实现提示] (3)实验二栈及其应用 (5)[实验目的] (5)[实验内容] (5)[测试数据] (5)实验三二叉树的递归算法 (5)[实验目的] (5)[实验内容] (6)[测试数据] (6)实验四查找及排序算法的应用 (7)[实验目的] (7)[实验内容] (7)[测试数据] (7)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。
本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。
本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。
由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。
由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。
为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。
数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。
在掌握基本算法的基础上,掌握分析、解决实际问题的能力。
通过实验实践内容的训练,突出构造性思维训练的特征, 提高学生组织数据及编写大型程序的能力。
数据结构实验指导书
数据结构实验指导书一、实验目的本实验旨在通过实践操作,加深对数据结构的理解,掌握数据结构的基本操作和算法设计。
二、实验内容1. 实验环境搭建:a. 安装编程环境,如C++编译器或Java开发环境。
b. 配置相关的开发工具和库文件。
2. 实验一:线性表的实现与应用a. 实现线性表的基本操作,包括初始化、插入、删除、查找等。
b. 实现线性表的应用,如实现一个简单的通讯录管理系统。
3. 实验二:栈和队列的实现与应用a. 实现栈的基本操作,包括入栈、出栈、判空等。
b. 实现队列的基本操作,包括入队、出队、判空等。
c. 实现栈和队列的应用,如实现一个简单的表达式计算器。
4. 实验三:二叉树的实现与应用a. 实现二叉树的基本操作,包括创建、插入、删除、遍历等。
b. 实现二叉树的应用,如实现一个简单的文件系统。
5. 实验四:图的实现与应用a. 实现图的基本操作,包括创建、插入节点、插入边、遍历等。
b. 实现图的应用,如实现一个简单的社交网络系统。
三、实验步骤1. 实验环境搭建:a. 下载并安装编程环境,如Dev-C++或Eclipse。
b. 配置相关的开发工具和库文件,确保能够正常编译和运行程序。
2. 实验一:线性表的实现与应用a. 设计线性表的数据结构,包括元素类型和相关操作。
b. 实现线性表的初始化、插入、删除和查找等基本操作。
c. 设计并实现一个简单的通讯录管理系统,包括添加联系人、删除联系人和查找联系人等功能。
3. 实验二:栈和队列的实现与应用a. 设计栈和队列的数据结构,包括元素类型和相关操作。
b. 实现栈的入栈、出栈和判空等基本操作。
c. 实现队列的入队、出队和判空等基本操作。
d. 设计并实现一个简单的表达式计算器,支持基本的四则运算。
4. 实验三:二叉树的实现与应用a. 设计二叉树的数据结构,包括节点类型和相关操作。
b. 实现二叉树的创建、插入、删除和遍历等基本操作。
c. 设计并实现一个简单的文件系统,支持文件和文件夹的创建、删除和查找等功能。
《数据结构》实验指导书
《数据结构》实验指导书实验指导书课程名称:数据结构计算机科学与工程系《数据结构》课程组目录前言 .................................... 1 一、实验的作用和目的 ..................... 2 二、实验方式与考核方式................... 2 三、实验要求 ............................. 3 四、实验报告要求......................... 4 五、实验内容 .. (5)实验一线性表应用 (5)实验二栈与队列应用 (10)实验三二叉树的操作 (14)实验四图的遍历 ................................................18 实验五查找算法应用 (21)六、选做实验内容 (24)实验六排序 ................................................ ....24 实验七数组和广义表 (26)实验八串 ................................................ . (27)前言《数据结构》数据结构是计算机科学与技术及相关专业的一门重要专业基础课,它主要介绍线性结构、树型结构、图状结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法,以及算法的时间、空间效率分析。
这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。
通过本课程的学习,使学生熟练地掌握数据结构的内在逻辑关系及其在计算机中的表示方法,以及相关基本操作的算法实现;掌握典型算法的设计思想及程序实现;熟悉各种数据结构在计算机科学中的基本应用;培养和训练学生结合实际应用,根据实际问题选取合适的数据结构、存储方案设计出简洁、高效、实用的算法;并为学习《操作系统》、《编译原理》、《数据库原理》等后续课程和研制开发各种系统和应用软件打下扎实的理论与实践基础。
《数据结构》实验指导书
实验一线性表的操作一、实验目的1.掌握在VC++6.0的集成环境中调试程序的基本方法。
2.掌握线性表的插入和删除操作在顺序存储结构和链式存储结构上的实现。
二、实验内容(三选一)(一)线性表的插入和删除操作在顺序存储结构和链式存储结构上的实现。
(1)线性表的插入和删除操作在顺序存储结构上的实现。
其中函数ListInsert_Sq的功能是在顺序线性表中第i个元素之前插入一个元素,函数ListDelete_Sq的功能是删除顺序线性表中第i个元素。
#define LIST_INIT_SIZE 1000#define LISTINCREMENT 10#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define OVERFLOW -2//顺序表的存储结构定义typedef int Status;typedef int ElemType;typedef struct{ElemType *elem; //首地址int length; //顺序表的长度int listsize; //顺序表的存储容量} SqList;Status InitList_Sq(SqList &L) // 顺序表的初始化{}// InitList_Sq(Status ListInsert_Sq (SqList &L, int i, ElemType e) //插入{ //在顺序表的第i个位置插入值e为的元素}// ListInsert_SqStatus ListDelete_Sq(SqList &L, int i, ElemType &e) //删除{ //在顺序表的第i个位置删除一个元素,值在存进e中}// ListDelete_Sqint main( ){ElemType y;SqList L;int i,n;InitList_Sq(L); /* 初始化线性表*/printf("输入顺序表需存进的元素数量!\n");scanf("%d",&n);while(n<1 || n>10){printf("请输入1--10之间的整数!\n");scanf("%d",&n);}/* 以上循环语句的功能是控制输入数据个数的合法性,可以修改*/printf("依次输入存进顺序表中的数据元素:\n");for(i=1;i<=n;i++){scanf(“%d”,&y);ListInsert_Sq(L,i,y) ;}/* 以上循环语句的功能是依次输入要存进顺序表中的元素,并存进顺序表*/printf("顺序表中的元素为:");for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);/* 以上循环语句的功能是依次输出顺序表中的元素*/printf("\n");printf(“输入要删除元素的位置!\n”);scanf(“%d”,&n);if(ListDelete_Sq(L,n,y)==OK) { printf(“删除成功!”); printf("被删除的元素是:%d\n",y); }printf("顺序表中的元素为:");for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);/* 以上循环语句的功能是依次输出顺序表中的元素*/printf("\n");system("pause");return 0;}实验程序运行示例:(2)线性表的建立、插入、删除、打印和查找操作在链式存储结构上的实现。
《数据结构》实 验 指 导 书.doc
《数据结构(C#)》实验指导书软件学院—、上机实验的指导思想和要求1.1 上机实验的目的上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。
上机实验的目的是:(1)加深对讲授内容的理解,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,通过多次上机,就能自然地、熟练地掌握。
(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C#程序开发的环境。
一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。
使用者应该了解为了运行一个C#程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。
每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快地学会。
(3)学会上机调试程序。
也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。
经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之。
而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人。
要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。
对程序设计来说,则要求会编程序并上机调试通过。
因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视。
调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”。
别人的经验不能代替自己的经验。
调试程序的能力是每个程序设计人员应当掌握的一项基本功。
因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变某些语句等),再进行编译、连接和运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.2实验报告(文档)书写规范实验报告(文档)应包括以下7个方面的内容:1、问题分析根据对实验任务的理解,以无歧义的陈述说明程序设计的任务,强调的是程序要做什么。
指出解决问题的关键步骤,如果问题复杂,应将问题分解成若干个子问题。
明确规定:(1)本实验的任务以及程序所能达到的功能;(2)完成该任务需要解决的关键问题;(3)程序设计中输入数据的类型、形式及输入值的范围;(4)设置测试数据:包括正确的输入及预计的输出结果和含有错误的输入及预计输出结果。
2.概要设计针对问题分析中提出的关键问题进行分析(可以列举实例进行分析),从而总结出关键问题的解决思路,给出解决关键问题的算法思想。
说明本程序中用到的所有程序模块、各程序模块之间的层次(调用)关系以及主程序的流程,各程序模块使用中文名称即可。
3.详细设计根据概要设计中提出的关键问题的解决思路,设计本程序中用到的所有数据结构,要求做到:(1)在所设计的数据结构下分析关键问题的具体解决方案和步骤,给出相应的用类C 语言描述的算法;(2)分析设计程序中需要用到的变量、全局变量及其数据类型定义;(3)设计程序中的所有模块(自定义函数和主函数),通过分析定义函数的类型、描述函数参数、说明函数名称,并给出相应类C语言描述的算法(类C语言算法达到的详细程度建议为:按照该算法可以直接写出高级程序设计语言程序);(4)画出函数和过程的调用关系图。
4.调试分析程序调试主要实现程序的语法错误检查和功能性错误检查。
调试最好分模块进行,自底向上,即先调试低层过程或函数。
在实验报告中应有如下内容:(1)记录调试过程中遇到的问题及其解决方案,如果由此反映出程序设计的不足,应对设计与实现进行回顾讨论和分析,并修正;(2)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;(3)经验和体会等。
5.测试结果将程序的测试结果截图,展示出你的测试过程和结果,包括输入和输出。
这里的测试数据应该完整和严格,最好多于问题分析中所列。
6.附录带注释的源程序。
如果提交源程序电子档,可以只列出程序文件名的清单。
值得注意的是,实验报告文档的前三部分要在程序开发的过程中逐渐充实形成,而不是最后补写。
实验一算法设计:(1)用指向指针的指针的方法对n个整数排序并输出。
要求将排序单独写成一个函数,n 和各整数在主函数中输入,最后在主函数中输出。
(2)编程求出10000以内的所有符合如下条件的数:其高位数字小于低位数字。
如25,349,2468等,但32,845不符合条件。
(3)编程求出数列的所有升或降的最大子序列。
如数列(1,20,30,12,3,5,7,4,6,100,11,8)的所有升或降的最大子序列如下:(1,20,30),(30,12,3),(3,5,7),(7,4),(4,6,100),(100,11,8)实验二顺序表实验【实验任务】1、程序验证(1)建立含有若干个元素的顺序表,并实现顺序表的插入、删除、查找等操作。
(2)阅读下列程序,指出算法的功能,写出其运行结果,并通过运行来验证。
#include “malloc.h”#define maxlen 50typedef struct{int data[maxlen];int last;3我}Sequenlist;Sequenlist *ABC(Sequenlist *A , Sequenlist *B){int i, j;Sequenlist *C;C = malloc(sizeof(Sequenlist));C->last = -1;for(i=0; i<=A->last; i++)for(j=0; j<=B->last; j++) {if(A->data[i]= = B->data[j]) {C->last++;C->data[C->last] = A->data[i];break;}return C;}Sequenlist *SqLset( ){Sequenlist *L;int i;L=malloc( sizeof(Sequenlist));L->last = -1;scanf(“%d”, &i); //输入表长if( i>0) {for(L->last=0; L->last <i; L->last ++)scanf(“%d”, & L->data[L->last]);L->last--;}return ( L);}main( ) {Sequenlist *A , *B, *C;int i;A = SqLset( );B = SqLset( );C = ABC(A, B);for(i=0; i<=C->last; i++)printf(“%4d”, C->data[i] );}(3)下面算法的预定功能是实现顺序表的倒置,试检查其中是否有错;若有错,指出错误所在,并修改之,然后通过运行来验证。
#include “malloc.h”#define maxlen 50typedef struct{int data[maxlen];int last;}Sequenlist;Sequenlist *SqLset( ){Sequenlist *L;int i;L=malloc( sizeof(Sequenlist));L->last = -1;scanf(“%d”, &i); //输入表长if( i>0) {for(L->last=0; L->last <i; L->last ++)scanf(“%d”, & L->data[L->last]);}return ( L);}Sequenlist *reverse(Sequenlist *L) {int i, j, x;for(i=0, j=L->last-i+1; i<= j; i ++ ) {x = L->data[i]; L->data[i]= L->data[j]; L->data[j]=x;}return ( L);}main( ) {Sequenlist *A;int i;A = SqLset( );for(i=0; i<=A->last; i++)printf(“%4d”, A->data[i] );printf(“\n”);A = Sequenlist ( );for(i=0; i<=A->last; i++)printf(“%4d”, A->data[i] );printf(“\n”);}2、算法填空请在下面算法的空格处填入适当内容,以使算法能求出顺序表中的最大和最小值,并通过运行来验证。
#include “malloc.h”#define maxlen 50typedef struct{int data[maxlen];int last;}Sequenlist;Sequenlist *SqLset( ){Sequenlist *L;int i;L=malloc( sizeof(Sequenlist));L->last = -1;scanf(“%d”, &i); //输入表长if( i>0) {for(L->last=0; L->last <i; L->last ++)scanf(“%d”, & L->data[L->last]);}return ( L);}void maxmin(Sequenlist *L) {int min, max, i;if( ) {max = min = L->data[0];for(i =1; i <= ; i ++) {if( max < L->data[i])max = L->data[i];if( min > L->data[i])min = L->data[i];}printf(“max=%d, min= %d\n”, max, min );}main( ) {Sequenlist *A;A = SqLset( );maxmin(A);}3、算法设计(1)设计算法实现删除顺序表中多余重复元素。
如:对于顺序表(1,2,3,1,3,4,3,5),删除第四个元素1及第五、第七个元素3。
(2)设计算法,实现在一个递增有序的顺序表的适当位置插入元素x,使得该顺序表仍然递增有序。
分析算法的时间复杂度。
实验三链表实验【实验任务】1、程序验证建立含有若干个元素的链表,并实现链表的插入、删除、查找等操作2、算法填空(1)下面建立以head为头指针的单链表,完善该算法,并输出表中元素。
已知单链表节点类型为:typedef struct node{int data;struct node *next;}LinkList;LinkList *create ( ){LinkList *p,*q;int k;q=head;scanf (“%d”,&k);while( k>0){;;;;scanf (“%d”,&k);}q->next = NULL;}(2)已给如下关于单链表的类型说明:typedef struct node{int data;struct node *next;}LinkList;以下程序采用链表合并的方法,将两个已排序的单链表合并成一个链表而不改变其排序性(升序),这里两链表的头指针分别为p和q。
完善该算法,输出合并后表中的元素。
LinkList *mergelink(LinkList *p,LinkList *q){LinkList *h,LinkList *r;;h->next= NULL;r=h;while( p!=NULL&&q!=NULL){if (p->data<=q->data){;r=p;p=p->next;}else{ ;r=q;q=q->next;}}if (p= =NULL) r->next=q;else ;return h;}(3)la为指向带头节点的单链表的头指针,本算法在表中第i个元素之前插入元素b。
完善该算法,并通过运行来验证。
LinkList *insert (LinkList *la,int i,datatype b){LinkList *p,*s;int j;p= ;j= ;while ( p!=NULL && ) {p = ;j=j+1;}if (p= =NULL || ) error (‘No this position’)else{s = malloc ( sizeof (LinkList) );s->data=b;s->next=p->next;p->next=s;}return la;}(4)已知双链表中节点的类型定义为:typedef struct Dnode{int data;struct Dnode *prior,*next;}DLinkList ;如下过程将在双链表第i个节点(i>=0)之后插入一个元素为x的节点。