东北林业大学-数据结构实验指导书2013级

合集下载

数据结构实验-实验指导书

数据结构实验-实验指导书

实验一线性表操作一、实验目的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.分析程序的优缺点、时空性能以及改进思想,写出心得体会。

实验一线性表一.目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。

要求仔细阅读并理解下列例题,上机通过,并观察其结果,然后独立完成后面的实习题。

二.例题[问题描述]用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。

《数据结构与算法》实验指导书2013版

《数据结构与算法》实验指导书2013版

《数据结构与算法》实验指导书大连民族学院信息与通信工程学院2013 年10 月10 日基本要求1.学生必须按时到实验室做实验,不得迟到早退,未经老师批准不得中途离开。

凡迟到者,应给予批评并作适当扣分。

实验课迟到20分钟以上及无故缺席者视为旷课,旷课者不予补做实验,本次实验以零分计。

学生因病或特殊情况不能按时到实验室做实验时,应办理正常请假手续。

请病假必须有医生签字的病假条,请事假必须有班主任签字的事假条。

不符合请假手续的,以旷课论处。

请假的学生由指导教师安排补做实验。

对于未做实验数达三分之一以上(含三分之一)的学生,实验课程按0分计。

2.学生在每次实验课之前,应仔细阅读实验教材,查阅相关的资料,写出预习报告。

预习报告的具体内容包括:实验内容、实验目的、实验原理图、实验步骤、实验数据记录表格等。

实验课前由任课教师检查预习报告,未写预习报告者不予做实验。

3.做实验前,了解设备的原理和正确使用方法。

在没有弄懂仪器设备的使用方法前,不得贸然使用,否则因使用不当造成仪器设备损坏的,根据大连民族学院《仪器设备损坏丢失处理暂行办法》规定进行处理。

实验室内设备在实验过程中不准任意搬动和调换,非本次实验所用仪器设备,未经指导教师允许不得动用。

4.要求每位学生在实验过程中,要具有严谨的学习态度、认真、踏实、一丝不苟的科学作风。

实验过程中学生按照预习的内容进行实验,且重视实验的调试过程,学会如何根据实验现象判断问题所在。

坚持每次实验都要亲自动手,不可“坐车”,每个实验每个学生都要独立完成,不允许抄袭,无特殊原因,中途不得退出实验,否则本次实验无效。

5.实验中若接线、改接、拆线都必须在切断电源的情况下进行,线路连接完毕再送电。

实验中,特别是设备刚投入运行时,要随时注意仪器设备的运行情况,如发现有过热、异味、冒烟、火花等,应立即断电,并请指导老师检查、处理。

6.实验过程中,如出现事故,就马上拉开电源开关,然后找指导教师和实验技术人员,如实反映事故情况,并分析原因和处理事故。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。

具体而言,实验的目的包括: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.顺序表的表示和运算(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) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。

要求尽可能少地修改前面的程序来得到新程序。

数据结构与算法-东北林业大学 《数据结构》实验指导书new

数据结构与算法-东北林业大学 《数据结构》实验指导书new

计算机科学与技术专业《数据结构》实验指导书关于实习步骤的要求和建议从以往的教学事先实习的经验来看,在初学阶段执行严格的实习步骤规范(包括上机操作规范),机时利用率会大大提高,有助于养成良好的程序编制风格,培养严谨、科学、高效的工作方式。

在以往的教学实践中,经常发现很多学生抱怨说,化了两个小时才找出一个错误,甚至一无所获。

他们不明白造成这种情况的原因,正是他们自己。

有的学生不屑于按实习步骤规范去做,甚至对于实习步骤的要求和建议看都不看一遍,认为那是浪费时间,这是及其害的。

实习步骤规范不但可以培养科学化的工作作风,而且还能有效地避免错误。

具体的步骤机规范如下:1.问题分析与系统的结构设计充分地分析和理解问题本身,弄清要求作什么,限制条件是什么。

按照以数据结构为中心的原则划分模块,即定义数据结构及其在这些结构之上的操作,使得对数据结构的存取通过这些操作加以实现。

在这个过程中,要综合考虑系统功能。

要考虑系统结构清晰、合理、简单并且易于调试。

最后写出每个子程序(过程或函数)的规格说明,列出它们之间的调用关系,可以使用调用关系图表示则更加清晰,这样便完成了系统结构设计。

2.详细设计和编码详细设计的目的是对子程序(过程或函数)的进一步求精。

用 IF 、 WHILE和赋值语句等,以及自然语言写出算法的框架。

利用自然语言的目的是避免陷入细节。

在编码是,可以对详细设计的结果进一步求精,用高级语言表示出来。

程序的每一行最好不超过 60 个字符。

每个子程序(或过程、函数)通常不要太长,以 40 行为宜。

子程序(或过程、函数)包含的程序行数太多,易于造成理解的困难。

控制IF 、WHILE 等语句的连续嵌套的深度。

程序的目的性必须明确。

对每一段程序完成的作用,除非常明显的除外(如:x = x + 1; 注释为 x 加 1,没有什么意义),都应加以注释。

这会对程序的调试提供很多方便。

另外,根据情况可以设立若干调试点,即输出若干信息,用于验证和你的设想是否一致。

数据结构课程实验指导书

数据结构课程实验指导书

《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。

本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。

数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。

实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。

通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。

二、实验前的准备工作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、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立线性表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立单链表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

三、用C语言编程实现两个按递增顺序排列线性表的合并1、编程实现合并按递增顺序排列的两个顺序表算法;2、编程实现合并按递增顺序排列的两个单链表算法。

【思考问题】结合实验过程,回答下列问题:1、何时采用顺序表处理线性结构的问题为最佳选择;2、何时采用链表处理线性结构的问题为最佳选择。

【实验报告要求】1、根据对线性表的理解,如何创建顺序表和单链表;2、实现顺序表插入和删除操作的程序设计思路;3、实现链表插入和删除操作的程序设计思路;4、实现两表合并操作的程序设计思路;5、调试程序过程中遇到的问题及解决方案;6、本次实验的结论与体会。

数据结构实验报告_9

数据结构实验报告_9

本科生实验报告(二)姓名:学院:专业:班级:实验课程名称: 数据结构实验日期: 2013年 5月 25 日指导教师及职称:实验成绩:开课时间:2012~2013 学年第二学期k++;a[j][n-i-1]=k;}for (j=n-i-2;j>=i;j--){k++;a[n-i-1][j]=k;}for (j=n-i-2;j>=i+1;j--){k++;[j][i]=k;}}}void main(){int n,i,j;int a[MaxLen][MaxLen];printf("输入n(n<10):");scanf("%d",&n);fun(a,n);printf("%d阶数字方阵如下:\n",n);for (i=0;i<n;i++){for (j=0;j<n;j++)printf("%4d",a[i][j]);printf("\n");}}运行结果:6.2:如果矩阵A中存在这样的一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称为该矩阵的一个马鞍点。

设计一个程序exp6-2.cpp 计算出m*n的矩阵A的所有马鞍点。

主程序如下:6.3:已知A和B为两个n*n阶的对称矩阵,输入时,对称矩阵只输入下三角形元素,存入一维数组,如图6.5所示(对称矩阵M存储在一维数组A中),设计一个程序exp6-3.cpp 实习如下功能:(1)求对称矩阵A和B的和。

(2)求对称矩阵A和B的乘积。

A:图6.5 对称矩阵的存储转换形式主程序如下:#include <stdio.h>#define N 4#define M 10int value(int a[],int i,int j){if (i>=j)return a[(i*(i-1))/2+j];elsereturn a[(j*(j-1))/2+i];}void madd(int a[],int b[],int c[][N]){int i,j;for (i=0;i<N;i++)printf("a+b:\n");disp2(c1);printf("a×b:\n");disp2(c2);printf("\n");}运行结果:6.4::假设n*n的稀疏矩阵A采用三元组表示,设计一个程序exp6-4.cpp实现如下功能:(1)生成如下两个稀疏矩阵矩阵的三元组a和b:(2)输出a转置矩阵的三元组;(3)输出a+b的三元组;(4)输出a*b的三元组。

《数据结构 》实验指导书(3)

《数据结构 》实验指导书(3)

《数据结构》实验指导书实验类别:课内实验实验课程名称:数据结构实验室名称:软件工程实验室实验课程编号:02060002总学时:64 学分: 4适用专业:计算机科学与技术、网络工程、软件工程先修课程:计算机导论及操作、离散数学实验在教学培养计划中地位、作用:数据结构是计算机软件相关专业的主干课程,也是计算机软硬件专业的重要基础课程。

数据结构课程实验的目的是通过实验掌握数据结构的基本理论和算法,并运用它们来解决实际问题。

数据结构课程实验是提高学生动手能力的重要的实践教学环节,对于培养学生的基本素质以及掌握程序设计的基本技能并养成良好的程序设计习惯方面发挥重要的作用。

实验一线性表的应用(2学时)1、实验目的通过本实验,掌握线性表链式存储结构的基本原理和基本运算以及在实际问题中的应用。

2、实验内容建立某班学生的通讯录,要求用链表存储。

具体功能包括:(1)可以实现插入一个同学的通讯录记录;(2)能够删除某位同学的通讯录;(3)对通讯录打印输出。

3、实验要求(1)定义通讯录内容的结构体;(2)建立存储通讯录的链表结构并初始化;(3)建立主函数:1)建立录入函数(返回主界面)2)建立插入函数(返回主界面)3)建立删除函数(返回主界面)4)建立输出和打印函数(返回主界面)I)通过循环对所有成员记录输出II)输出指定姓名的某个同学的通讯录记录5)退出实验二树的应用(2学时)1、实验目的通过本实验掌握二叉的建立和递归遍历、非递归遍历算法,了解二叉树在实际中的应用并熟练运用二叉树解决实际问题。

2、实验内容根据前序遍历的顺序建立一棵二叉树,并根据遍历规则遍历二叉树。

打印输出。

3、实验要求(1)根据前序遍历的顺序创建一棵二叉树;()对二叉树进行前序、中序、后序遍历。

实验三图的应用(2学时)1、实验目的通过本实验掌握图的存储结构与基本运算以及图的深度优先遍历和图的广度优先遍历算法在实际问题中的应用。

2、实验内容按照邻接表对图进行创建,并运用图的深度优先遍历和图的广度优先遍历算法对所创建的无向图进行遍历。

《数据结构与算法》实验指导书2013版

《数据结构与算法》实验指导书2013版

《数据结构与算法》实验指导书大连民族学院信息与通信工程学院2013 年10 月10 日基本要求1.学生必须按时到实验室做实验,不得迟到早退,未经老师批准不得中途离开。

凡迟到者,应给予批评并作适当扣分。

实验课迟到20分钟以上及无故缺席者视为旷课,旷课者不予补做实验,本次实验以零分计。

学生因病或特殊情况不能按时到实验室做实验时,应办理正常请假手续。

请病假必须有医生签字的病假条,请事假必须有班主任签字的事假条。

不符合请假手续的,以旷课论处。

请假的学生由指导教师安排补做实验。

对于未做实验数达三分之一以上(含三分之一)的学生,实验课程按0分计。

2.学生在每次实验课之前,应仔细阅读实验教材,查阅相关的资料,写出预习报告。

预习报告的具体内容包括:实验内容、实验目的、实验原理图、实验步骤、实验数据记录表格等。

实验课前由任课教师检查预习报告,未写预习报告者不予做实验。

3.做实验前,了解设备的原理和正确使用方法。

在没有弄懂仪器设备的使用方法前,不得贸然使用,否则因使用不当造成仪器设备损坏的,根据大连民族学院《仪器设备损坏丢失处理暂行办法》规定进行处理。

实验室内设备在实验过程中不准任意搬动和调换,非本次实验所用仪器设备,未经指导教师允许不得动用。

4.要求每位学生在实验过程中,要具有严谨的学习态度、认真、踏实、一丝不苟的科学作风。

实验过程中学生按照预习的内容进行实验,且重视实验的调试过程,学会如何根据实验现象判断问题所在。

坚持每次实验都要亲自动手,不可“坐车”,每个实验每个学生都要独立完成,不允许抄袭,无特殊原因,中途不得退出实验,否则本次实验无效。

5.实验中若接线、改接、拆线都必须在切断电源的情况下进行,线路连接完毕再送电。

实验中,特别是设备刚投入运行时,要随时注意仪器设备的运行情况,如发现有过热、异味、冒烟、火花等,应立即断电,并请指导老师检查、处理。

6.实验过程中,如出现事故,就马上拉开电源开关,然后找指导教师和实验技术人员,如实反映事故情况,并分析原因和处理事故。

数据结构与算法-东北林业大学 实验和上机指导

数据结构与算法-东北林业大学 实验和上机指导

• 四、
调试分析 • 1. 调试中遇到的问题及对问题的解决方法;
• 2. 算法的时间复杂度和空间复杂度。
• 五、
使用说明及测试结果
源程序(带注释)
ห้องสมุดไป่ตู้
《数据结构实验》教学大纲
• 一、总则 • ⒈本课程的教学目的和要求 • 数据结构是信息与计算科学专业中一门重要的专业基础
课程。当用计算机来解决实际问题时,就要涉及到数据的表 示及数据的处理,而数据表示及数据处理正是数据结构课程 的主要研究对象,通过这两方面内容的学习,为后续课程, 特别是软件方面的课程打下了厚实的知识基础,同时也提供 了必要的技能训练。因此,数据结构课程在计算机应用专业 中具有举足轻重的作用。 • 本课程的任务是:通过实践,学生对常用数据结构的基 本概念及其不同的实现方法的理论得到进一步的掌握,并对 在不同存储结构上实现不同的运算方式和技巧有所体会。
• 实验报告规范: 实验题目 • 班级 姓名 学号 • 一、 需求分析
• 1. 程序的功能; • 2. 输入输出的要求; • 3. 测试数据。
日期
• 二、
概要设计 • 1. 本程序所用的抽象数据类型的定义;
• 2. 主程序的流程及各程序模块之间的层次关系。
• 三、
详细设计 • 1. 采用c语言定义相关的数据类型; • 2. 写出各模块的伪码算法; • 3. 画出函数的调用关系图。
• 使得系统结构清晰、合理、简单和易于调试,抽象数 据类型的实现尽可能做到数据的封装,基本操作的规 格说明尽可能的明确和具体。作为逻辑设计的结果。 应写出每个抽象数据类型的定义(包括数据结构的描 述和每个基本操作的规格说明),各个主要模块的算 法,并画出模块之间的调用关系图。详细设计的结果 是对数据结构和基本操作的规格说明做出进一步的求 精,写出数据存储结构的类型定义,按照算法书写规 范用类C语言写出函数形式的算法框架。 • 2.编码实现和静态检查 • 3.上机准备和上机调试 • 4.总结和整理实习报告 • • 附:实验报告规范

《数据结构》实验指导书

《数据结构》实验指导书

《数据结构》实验指导书实验指导书课程名称:数据结构计算机科学与工程系《数据结构》课程组目录前言 .................................... 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)线性表的建立、插入、删除、打印和查找操作在链式存储结构上的实现。

数据结构实验指导书

数据结构实验指导书

《数据结构与算法》实验指导书实验1 顺序表一、实验目的(1)掌握顺序表的逻辑结构、存储结构及描述方式。

(2)掌握顺序表的定位、插入、删除等操作。

二、实验要求(1)调试程序要记录调试过程中出现的问题及解决办法;(2)给出每个问题的算法或画出流程图;(3)编写程序要规范、正确,上机调试过程和结果要有记录,并注意调试程序集成环境的掌握及应用,不断积累编程及调试经验;(4)做完实验后给出本实验的实验报告。

三、实验设备、环境奔腾以上计算机,装有Turbo C 2.0或Visual C++软件四、实验步骤及内容实验步骤:1.根据题目,编写程序。

2.上机调试通过。

3.按照实验报告格式,撰写各实验报告。

实验内容:(1)编写一个函数print_all_data,该函数的作用是逐个输出顺序表中所有数据元素的值。

编写主函数,从键盘输入顺序表,调用函数print_all_data,测试结果。

(2)编写顺序表定位操作函数locata,该函数的作用是在顺序表中查找是否存在数据元素的值与变量x的值相等。

如果存在满足条件的数据元素,则返回顺序表中和x值相等的第1个数据元素在表中的下标;如果不存在,则返回-1。

编写主函数,从键盘输入顺序表,以及变量x的值,调用函数locate,测试结果。

(3)编写一个函数insert,该函数的作用是在递增有序的顺序表中插入一个新结点x,要求保持顺序表的有序性,输出插入前后顺序表状态。

编写主函数,从键盘输入顺序表以及变量x的值,调用函数insert,测试结果。

(4)编写一个函数delete,该函数的作用是删除顺序表中所有等于X的数据元素。

若顺序表中没有满足条件的数据元素,则输出合适的信息。

若有满足条件的数据元素,则输出删除前后顺序表状态。

编写主函数,从键盘输入顺序表以及变量x的值,调用函数delete,测试结果。

五、讨论、思考题1、如何在排列有序的顺序表中插入新元素,而保证顺序表的有序性?2、如何在排列有序的顺序表中删除某元素,而保证顺序表的有序性?实验2 单链表一、实验目的(1)掌握单链表的逻辑结构、存储结构及描述方式。

《数据结构》实验指导(一)-无删减范文

《数据结构》实验指导(一)-无删减范文

《数据结构》实验指导(一)数据结构实验指导(一)1. 实验背景数据结构是计算机科学中的一个重要概念,它描述了如何组织和存储数据以及如何通过不同的操作来访问和修改这些数据。

在本实验中,我们将学习和实践数据结构中的线性表和链表。

2. 实验目的通过本次实验,我们将达到以下目的:- 理解线性表和链表的概念- 学会如何使用线性表和链表来解决常见的问题- 掌握线性表和链表的基本操作3. 实验内容3.1 线性表线性表是由 n 个数据元素 a1, a2, , an 组成的有序序列。

常见的线性表有数组和链表两种实现方式。

3.1.1 线性表的基本操作线性表的基本操作包括:- 初始化线性表- 判断线性表是否为空- 获取线性表的长度- 获取线性表中的元素- 在线性表的指定位置插入元素- 删除线性表中的指定元素- 清空线性表3.1.2 数组数组是一种连续的内存空间,可以存储相同类型的数据元素。

在数组中,每个元素的位置是通过下标来访问的,下标从 0 开始。

3.1.2.1 数组的插入操作数组的插入操作是将一个元素插入到数组的指定位置,同时需要将原位置的元素及其后续元素后移一位。

3.1.2.2 数组的删除操作数组的删除操作是将数组中指定位置的元素删除,同时需要将后续元素前移一位。

3.2 链表链表是一种离散的数据结构,它的元素包含两个部分:数据和指针。

每个节点都包含一个数据元素和一个指向下一个节点的指针。

3.2.1 链表的基本操作链表的基本操作包括:- 初始化链表- 判断链表是否为空- 获取链表的长度- 获取链表中的元素- 在链表的指定位置插入元素- 删除链表中的指定元素- 清空链表3.2.2 单链表单链表是最简单的链表形式,它的每个节点只包含一个指向下一个节点的指针。

3.2.2.1 单链表的插入操作单链表的插入操作是将一个元素插入到链表的指定位置,同时需要调整指针的指向。

3.2.2.2 单链表的删除操作单链表的删除操作是将链表中指定位置的节点删除,同时需要调整指针的指向。

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

数据结构实验指导书(第2版)东北林业大学信息与计算机工程学院计算机科学与技术专业目录1实验目的与要求 (1)2实验环境 (1)3 实验一般步骤 (1)4实验时数 (2)5实验内容和要求 (3)实验一线性表的顺序存储结构 (3)实验二链式存储结构(一)单向链表的有关操作 (4)实验三链式存储结构(二)双向链表的有关操作 (5)实验四栈和队列的有关操作 (6)实验五二叉树的常见操作 (7)实验六图的有关操作 (8)实验七查找的有关操作 (9)实验八排序的有关操作 (10)1 实验目的与要求从以往的教学事先实习的经验来看,在初学阶段执行严格的实习步骤规范(包括上机操作规范),机时利用率会大大提高,有助于养成良好的程序编制风格,培养严谨、科学、高效的工作方式。

在以往的教学实践中,经常发现很多学生抱怨说,化了两个小时才找出一个错误,甚至一无所获。

他们不明白造成这种情况的原因,正是他们自己。

有的学生不屑于按实习步骤规范去做,甚至对于实习步骤的要求和建议看都不看一遍,认为那是浪费时间,这是及其害的。

实习步骤规范不但可以培养科学化的工作作风,而且还能有效地避免错误。

2 实验环境(1)计算机的硬件配置PC系列微机。

(2)计算机的软件配置DOS6.22或Windows 98、Windows xp、Windows 2000。

C语言的集成开发环境TurboC V3.0,或Visual C++6.0。

3 实验一般步骤⑴问题分析与系统的结构设计充分地分析和理解问题本身,弄清要求作什么,限制条件是什么。

按照以数据结构为中心的原则划分模块,即定义数据结构及其在这些结构之上的操作,使得对数据结构的存取通过这些操作加以实现。

在这个过程中,要综合考虑系统功能。

要考虑系统结构清晰、合理、简单并且易于调试。

最后写出每个子程序(过程或函数)的规格说明,列出它们之间的调用关系,可以使用调用关系图表示则更加清晰,这样便完成了系统结构设计。

⑵详细设计和编码详细设计的目的是对子程序(过程或函数)的进一步求精。

用IF、WHILE和赋值语句等,以及自然语言写出算法的框架。

利用自然语言的目的是避免陷入细节。

在编码是,可以对详细设计的结果进一步求精,用高级语言表示出来。

程序的每一行最好不超过60个字符。

每个子程序(或过程、函数)通常不要太长,以40行为宜。

子程序(或过程、函数)包含的程序行数太多,易于造成理解的困难。

控制IF、WHILE等语句的连续嵌套的深度。

程序的目的性必须明确。

对每一段程序完成的作用,除非常明显的除外(如:x=x+1;注释为x加1,没有什么意义),都应加以注释。

这会对程序的调试提供很多方便。

另外,根据情况可以设立若干调试点,即输出若干信息,用于验证和你的设想是否一致。

另外,对于输入输出语句,必须对它们的作用加以说明。

否则,在调试程序时,无法了解系统需要输入说明,系统输出的又是什么。

程序的书写,必须按照一定的规范,如保留字小写时涂黑,或者大写等等。

具体的要求可参看软件工程中的有关规定。

⑶上机准备和静态检查①高级语言文本②熟悉机器的用户手册,熟悉常用的命令。

③准备调试的工具,考虑调试方案。

如果机器上没有现成的调试工具可供利用,可以自己先设计一些以供使用。

④静态检查自己用一组数据手动执行程序;或同同学一起阅读自己的程序,以全面地了解该程序的逻辑。

⑷上机调试程序自底向上,先调试底层模块,再调试上层模块。

最后,整个程序进行联调。

调试正确后将源程序和运行结果加以列印输出。

⑸实习报告的整理①需求及规格说明问题描述,求解的问题是什么。

②设计:设计思想:存储结构、主要的算法思想。

设计表示:子程序(过程或函数)的规格说明,通过调用关系图表示它们之间的调用关系。

实现注释:详细设计表示:主要算法的框架。

③用户手册:使用说明。

④调试报告:问题是如何解决的,讨论与分析、改进设想、经验与体会、时空复杂度等。

⑤附录源程序清单和结果:源程序必须有注释,以及必要的测试数据和运行结果数据。

提倡用英文描述。

⑥实验报告要求:在程序开发过程中,逐步形成各种必要的文档及资料。

可以写在实验报告纸上,或以电子文档的形式进行书写。

4 实验时数总实验时数不得少于16学时。

5 实验内容和要求以下的实习题目配合课程的进度,请同学们自己务必完成。

为了锻炼自己的应用各种不同的数据结构的能力,尽可能的多作一些题目是非常必要的。

在完成各种不同题目的过程中,对各种算法的时、空复杂性的分析,将帮助您在更高的角度解决各种应用问题。

每次实验后要交实验报告,实验报告的内容应包括:(1)实验题目、班级、学号、姓名、完成日期;(2)简要的需求分析与概要设计;(3)详细的算法描述;(4)程序清单与运行结果;(5)收获与体会。

实验一线性表的顺序存储结构一、实验学时:2学时二、背景知识:顺序表的插入、删除及应用。

三、目的要求:⑴掌握顺序存储结构的特点。

⑵掌握顺序存储结构的常见算法。

四、实验内容:⑴输入一组整型元素序列,建立顺序表。

⑵实现该顺序表的遍历。

⑶在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。

⑷判断该顺序表中元素是否对称,对称返回1,否则返回0。

⑸实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。

⑹输入整型元素序列利用有序表插入算法建立一个有序表。

⑺利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。

⑻编写一个主函数,调试上述算法。

*⑼综合训练:利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)五、实验说明:⑴算法1至算法7可以以头文件的方式存储,主函数实现该头文件的包含即可调用⑵存储定义#define MAXSIZE 100 //表中元素的最大个数typedef int ElemType;//元素类型typedef struct list{ElemType elem[MAXSIZE];//静态线性表int length; //表的实际长度}SqList;//顺序表的类型名⑶建立顺序表时可利用随机函数自动产生数据。

六、注意问题:插入、删除时元素的移动原因、方向及先后顺序。

解不同的函数形参与实参的传递关系。

实验二链式存储结构(一)单向链表的有关操作一、实验学时:2学时二、背景知识:单向链表的插入、删除及应用。

三、目的要求:⑴掌握单向链表的存储特点及其实现。

⑵掌握单向链表的插入、删除算法及其应用算法的程序实现。

四、实验内容:⑴随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。

⑵遍历单向链表。

⑶把单向链表中元素逆置(不允许申请新的结点空间)。

⑷在单向链表中删除所有的偶数元素结点。

⑸编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单向链表。

⑹利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。

⑺利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表。

⑻利用算法1建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。

*⑼采用单向链表实现一元多项式的存储并实现两个多项式相加并输出结果。

⑽在主函数中设计一个简单的菜单,分别调试上述算法。

*⑾综合训练:利用链表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等,并能够实现将数据存储到文件中)五、实验说明:⑴类型定义#include <stdio.h>typedef int ElemType;//元素类型typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;⑵为了算法实现简单,最好采用带头结点的单向链表。

六、注意问题:⑴重点理解链式存储的特点及指针的含义。

⑵注意比较顺序存储与链式存储的各自特点。

⑶注意比较带头结点、无头结点链表实现插入、删除算法时的区别。

⑷单向链表的操作是数据结构的基础,一定要注意对这部分的常见算法的理解。

实验三链式存储结构(二)双向链表的有关操作一、实验学时:2学时二、背景知识:双向链表的插入、删除及应用。

三、目的要求:⑴掌握双向链表的存储特点及其实现。

⑵掌握双向链表的插入、删除算法及其应用算法的程序实现。

四、实验内容:⑴利用尾插法建立一个双向链表。

⑵遍历双向链表。

⑶实现双向链表中删除一个指定元素。

⑷在非递减有序双向链表中实现插入元素e仍有序算法。

⑸判断双向链表中元素是否对称若对称返回1否则返回0。

⑹设元素为正整型,实现算法把所有奇数排列在偶数之前。

⑺在主函数中设计一个简单的菜单调试上述算法。

五、双向链表的类型定义:typedef int ElemType;//元素类型typedef struct DuLNode{ ElemType data;struct DuLNode *prior,*next;}DuLNode,*DuLinkList;六、注意问题:注意比较单向、双向链表的特点。

实验四栈和队列的有关操作一、实验学时:2学时二、背景知识:入栈、出栈,入队、出队。

三、目的要求:⑴掌握栈、队列的思想及其存储实现。

⑵掌握栈、队列的常见算法的程序实现。

四、实验内容:⑴采用链式存储实现栈的初始化、入栈、出栈操作。

⑵采用顺序存储实现栈的初始化、入栈、出栈操作。

⑶采用链式存储实现队列的初始化、入队、出队操作。

⑷采用顺序存储实现循环队列的初始化、入队、出队操作。

⑸在主函数中设计一个简单的菜单,分别测试上述算法。

*⑹综合训练:①利用栈实现表达式求值算法。

②利用栈实现迷宫求解。

五、实验说明:⑴基本要求:实现算法1、3或算法2、4即可。

⑵类型定义顺序栈示例#define MAX 100 //栈的最大值typedef struct{ ElemType *base;int top;}SqStack;顺序队列示例#define MAX 100 //队列的最大长度typedef struct{ ElemType *base;int front,rear;}SqQueue;⑶算法6的每个子功能尽可能写成函数形式。

六、注意问题:⑴重点理解栈、队列的算法思想,能够根据实际情况选择合适的存储结构。

⑵注意算法6的各个函数之间值的传递情况。

⑶栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。

实验五二叉树的常见操作一、实验学时:2学时二、背景知识:二叉树的存储、建立、遍历及其应用。

三、目的要求:⑴掌握二叉树的存储实现。

⑵掌握二叉树的遍历思想。

⑶掌握二叉树的常见算法的程序实现。

四、实验内容:⑴输入字符序列,建立二叉链表。

⑵中序遍历二叉树:递归算法。

⑶中序遍历二叉树:非递归算法。

(最好也能实现先序,后序非递归算法)⑷求二叉树的高度。

⑸求二叉树的叶子个数。

相关文档
最新文档