数据结构实验指导手册(2015版)

合集下载

数据结构实验指导书

数据结构实验指导书

《数据结构》实验指导书实验一顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。

实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。

实验内容:1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求:(1)设数据元素为整数,实现线性表的顺序存储表示。

(2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。

(3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。

2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求:(1)数据元素为学生成绩(含姓名、成绩等字段)。

(2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。

(这里用于比较的字段为分数)实验二链表实验目的:熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。

实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容:1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下:(1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。

(2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表并带有头结点。

(用于比较的字段为分数)。

(3)输入关键字值x,打印出表中所有关键字值<=x的结点。

(用于比较的关键字字段为分数)。

(4)输入关键字值x,删除表中所有关键字值<=x的结点。

(用于比较的关键字字段为分数)。

(5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。

(用于比较的字段为分数)。

实验三栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。

实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。

实验内容:(1)判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。

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

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

实验一线性表操作一、实验目的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都是中心对称的字符串。

2015数据结构实验手册资料

2015数据结构实验手册资料

《数据结构实验》指导书Data Structures and Algorithms Laboratory Projects王金荣2014-09-11目录1《数据结构实验》课程实验教学大纲--------------------------------------12 实验准备: 如何使用VC 6.0? ----------------------------------------------33 Projects---------------------------------------------------------------------------8 3.1 Project 1: 算法性能测量-------------------------------------------------8 3.2 Project 2: 有序表归并实验---------------------------------------------10 3.3 Project 3: 数据转换------------------------------------------------------11 3.4 Project 4: 二叉树遍历实验---------------------------------------------12 3.5 Project 5-1: 堆排序算法实现------------------------------------------13 3.6 Project 5-2: 归并排序算法实现---------------------------------------14 3.7 Project 5-3: 快速排序算法实现---------------------------------------15 3.8 Project 6-1: 图的深度优先搜索---------------------------------------16 3.9 Project 6-2: 图的广度优先搜索---------------------------------------173.10 Project 7: 散列实验---------------------------------------------------184.1 ACM题目-------------------------------------------------------------------19 4.1 ACM 1: ACboy needs your help again!-------------------------------19 4.2 ACM 2: Jumping the Queue--------------------------------------------21 4.3 ACM 3: Median ----------------------------------------------------------234.4 ACM 4: Ignatius and the Princess I------------------------------------255 实验报告格式-----------------------------------------------------------------28 6实验报告上交说明-----------------------------------------------------------291《数据结构实验》课程实验教学大纲课程中文名称:数据结构实验课程英文名称:Data Structure Practices实验课程性质:独立设课课程编码:044209101一、学时、学分课程总学时:34 实验学时:34课程总学分:1 实验学分:1二、适用专业及年级计算机科学与技术专业,软件工程专业,第二学期三、实验教学目的与基本要求“数据结构实验”的总体目标是:通过实验使学生对课堂讲授的内容有实际的体验,加深对概念、算法、技术的理解、掌握、应用,并激发学生进一步的思考和发挥,注重培养学生的学习兴趣和创新思维。

数据结构实验指导书

数据结构实验指导书

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

具体而言,实验的目的包括: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、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。

数据结构 2015版(严)

数据结构 2015版(严)

树和二叉树
问题:对于一般的二叉树如何存储呢?
●非完全二叉树的存储示例
1 3 5 6 7
6 7Βιβλιοθήκη 2 4一般二叉树也 必须以完全二 叉树的形式来 确定。无结点 的补0,造成了 存储空间的浪 费。
bt(1:11)
1 2 3 4 5 0 0 0 0
(0表示不存在此结点)
6.2 二叉树
6.2.3 二叉树的存储结构 一、顺序存储结构
6.2 二叉树
6.2.1 二叉树的定义 ● 基本形态:二叉树有5种基本形态。
树和二叉树

A B
A
A B
左子树为空
A B C
左、右子树 均非空
空二叉树
只有根结点 的二叉树
右子树为空
图6.3 树的5种基本形态
6.2 二叉树
6.2.2 二叉树的性质
树和二叉树
性质1:在二叉树的第i层上至多有2i-1个结点(i≥1)。 [证]用归纳法。 1)i=1,只有一个根结点。2i-1=20=1。正确。 2)设命题对j成立,即有第j层上至多有2j-1个结 点。由于二叉树每个结点的度至多为2,故第i层上最 大结点数是第i-1层的2倍,即2j-1.2=2j=2(j+1)-1。故命 题对j+1亦成立。 证毕。
link n
困惑:构造树的结点时 应当开多少个链域?
树和二叉树
左孩子-右兄弟表示法
A B C D
E
F
G
H
I
J
data 右兄弟 左孩子
K
L
M
多叉树转为 了二叉树
6.2 二叉树
树和二叉树
为何要重点研究结点最多只有两个 “叉” 的树?
● 二叉树的结构最简单,规律性最强; ● 可以证明,所有树都能转为唯一对应的二叉树, 不失一般性。

数据结构课程实验指导书

数据结构课程实验指导书

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

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

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

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

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

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

二、实验前的准备工作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.单击“保存”按钮保存源程序。

数据结构2015版严.pdf

数据结构2015版严.pdf

6.2 二叉树
6.2.1 二叉树的定义 ● 基本形态:二叉树有5种基本形态。
树和二叉树
A
A
A
A
空二叉树
只有根结点 的二叉树
B
右子树为空
B
B
C
左子树为空
左、右子树 均非空
图6.3 树的5种基本形态
6.2 二叉树
树和二叉树
6.2.2 二叉树的性质
性质1:在二叉树的第i层上至多有2i-1个结点(i≥1)。
树和二叉树
第6章 树和二叉树
计算机科学与技术学院 主讲:孙玉霞
树和二叉树
目 录
6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.6 赫夫曼树及其应用
树和二叉树
●基本要求: 1)理解并准确叙述树、二叉树、森林及其有关概念并
熟悉它们的基本性质; 2)熟悉树形结构的存储结构和中序线索二叉树; 3)熟悉树的遍历方法,尤其是二叉树的前序、中序和
困惑:构造树的结点时 应当开多少个链域?
左孩子-右兄弟表示法
树和二叉树
data 左孩子 右兄弟
A
B
C
D
E
F
G
HI
J
K
L
M
多叉树转为 了二叉树
6.2 二叉树
树和二叉树
为何要重点研究结点最多只有两个 “叉” 的树?
● 二叉树的结构最简单,规律性最强; ● 可以证明,所有树都能转为唯一对应的二叉树, 不失一般性。
树和二叉树
6.1 树的定义和基本术语
6.1.2 树的基本术语
• 结点(node)——表示树中的元素,包括数据项及若干指向其 子树的分支

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书院别专业班级姓名计算机学院编实验一线性表的顺序存储实验一、实验目的及要求1、掌握在TC环境下调试顺序表的基本方法2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。

二、实验学时2学时三、实验任务1、生成一个顺序表并动态地删除任意元素和在任意位置插入元素。

2、将两个有序表合并成一个有序表。

四、实验重点、难点1、在顺序表中移动元素。

2、在顺序表中找到正确的插入位置。

五、操作要点(一)顺序表基本操作的实现[问题描述] 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。

[基本要求] 要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。

[实现提示] 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。

[程序实现]#include <stdio.h>#include <conio.h>typedef int DataType ;# define maxnum 20typedef struct{int data[maxnum];int length;}SeqList;/*插入函数*/int insert(SeqList *L , int i , DataType x)/* 将新结点x插入到顺序表L第i个位置 */{ int j ;if( i<0 || i>(*L).length +1){ printf(" \n i 值不合法 ! ");return 0;}if((* L).length >=maxnum-1){ printf(" \n 表满不能插入!");return 0;}for(j=(*L).length;j>=i;j--) (*L).data[j+1]=(*L).data[j];(*L).data[i] = x;(*L).length++;return 1;}/*删除函数*/int delete( SeqList *L ,int i)/*从顺序L中删除第i个结点*/{ int j ;if( i<0|| i>(*L).length ){ printf(" \n 删除位置错误 ! ") ;return 0;}for(j=i+1;j<=(*L).length;j++)(*L).data[j-1] =(*L).data[j];(*L).length--;return 1;}/*生成顺序表*/void creatlist(SeqList * L){ int n , i , j ;printf("请输入顺序表 L 的数据个数:\n") ;scanf("%d" , &n) ;for(i=0 ; i<n ; i++){ printf("data[%d] =" , i) ;scanf("%d",&((*L).data[i]));}(*L).length=n-1;printf("\n") ;}/*creatlist *//*输出顺序表 L*/printout(SeqList * L){ int i ;for (i=0 ; i<=(* L).length ; i++){ printf(" data[%d]=", i) ;printf("%d", (*L).data[i]);}/*printout */printf("\n");}main(){ SeqList *L ;char cmd ;int i , t , x;clrscr() ;creatlist(L);do{printf("\ni , I ----- 插入\n") ;printf("d , D ----- 删除\n") ;printf("q , Q ----- 退出\n") ;do{cmd=getchar() ;}while((cmd!='i')&&(cmd!='I')&&(cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q')); switch(cmd){ case 'i':case 'I':printf("\nPlease input the DATA: ");scanf("%d",&x) ;printf("\nWhere? ");scanf("%d",&i) ;insert(L,i,x) ;printout(L);break ;case 'd':case 'D' :printf("\nWhere to Delete? ");scanf("%d",&i);delete(L,i);printout(L);break ;}}while((cmd!='q')&&(cmd!='Q'));}(二)有序顺序表的合并[问题描述] 已知顺序表la和lb中的数据元素按非递减有序排列,将la和lb表中的数据元素,合并成为一个新的顺序表lc[基本要求] lc中的数据元素仍按非递减有序排列,并且不破坏la和lb表[程序实现]# include <stdio.h># define maxnum 20typedef int DataType ;typedef struct{ DataType data[maxnum] ;int length ;}SeqList ;int MergeQL(SeqList la , SeqList lb , SeqList *lc){ int i , j , k ;if (la.length+1 + lb.length+1>maxnum){ printf("\narray overflow!") ;return 0;}i=j=k=0;while(i<=la.length && j<=lb.length){ if (la.data[i]<=lb.data[j])lc->data[k++]=la.data[i++] ;elselc->data[k++]=lb.data[j++];}/* 处理剩余部分 */while (i<=la.length) lc->data[k++]=la.data[i++];while (j<=lb.length) lc->data[k++]=lb.data[j++];lc->length=k-1;return 1;}main(){ SeqList la={{3,4,7,12,15},4} ;SeqList lb={{2,5,7,15,18,19},5} ;SeqList lc ;int i ;if (MergeQL(la,lb,&lc)){ printf("\n") ;for(i=0;i<=lc.length ; i++)printf("%4d",lc.data[i]);}}六、注意事项1、删除元素或插入元素表的长度要变化。

数据结构实验指导书(2015计科)

数据结构实验指导书(2015计科)

《数据结构课程设计》指导书•实验目的意义数据结构实验是《数据结构》课程必不可少的一个教学环节。

通过实验,学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构和算法的能力,而且可以在问题分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。

实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养软件工作所需要的动手能力。

•实验基本步骤及要求1.阅读实验指导书每一次实验从阅读实验指导书开始。

对于本次实验的实验目的、实验题目、实现提示以及思考题目、选做题目等应认真了解。

2.算法设计分析实验题目,参考实现提示,进行算法设计。

3.程序设计根据已完成的算法,用C语言或java进行程序设计。

4.调试和测试将所编程序在计算机上调试通过,并选取若干组测试数据对程序进行尽可能全面的测试。

5.整理完成实验报告实验报告一般包括下列内容:(1)实验者姓名、学号、专业和班级,课程名称(数据结构实验),实验日期等;(2)本次实验的实验编号及实验名称(例如:实验一线性表的应用);(3)本次实验的实验目的(可参考《数据结构实验指导》相关内容);(4)本次实验的实验地点、设备编号、硬件及软件环境;(5)程序结构的描述及各模块的规格说明;(6)主要算法及其基本思想;(7)调试过程简述(调试过程是否顺利,遇到些什么问题,如何解决的,以及上机操作所花费的时间等);(8)测试数据和相应输出的客观纪录,对运行结果的分析讨论。

•注意:为了有效地利用上机时间,上述实验步骤1,2,3应在上机之前完成。

1目录实验一顺序表及其在简单排序中的应用实验二线性表的链式存储实验三各种排序算法的比较实验四栈及其应用实验五栈和队列的综合应用实验六二叉树及其应用实验七图论及其应用实验八(1) 表达式求值实验八(2) 停车场管理模拟实验八(3) 哈希表设计(《数据结构题集6.2》)2实验一顺序表及其在简单排序中的应用一.实验目的熟悉线性表的顺序存储结构,熟练掌握顺序表的抽象数据类型及各种基本操作的实现;利用所定义的顺序表抽象数据类型实现各类排序算法,培养灵活运用顺序表解决实际问题的能力。

《数据结构》实验指导书

《数据结构》实验指导书

数据结构实验指导书吉林大学珠海学院计算机系2012.12实验目的与要求《数据结构》是计算机学科重要的专业基础课,北京市高校已将该课作为理工科非计算机专业的提高课程,北京大学将此课列为理工科非计算机专业必修课已经超过15 年。

该课程主要研究信息在计算机中的组织和表示方法。

上机实验是本课程教学至关重要的环节,通过上机实验,使学生在数据结构的逻辑结构定义、存储表示、操作的实现、数据结构的选择和应用、算法实践等方面加深对课程内容的理解,训练学生进行复杂程序设计的技能和培养良好程序设计的习惯。

考虑到大一上学期学习过C程序设计,本学期有C课程设计和C++程序设计,故数据结构课程的实验不安排验证性实验,按课程设计要求。

具体说是期初布置题目,按学号顺序确定如下题目,学生自己准备,期中检查,15周开始验收。

验收时间安排在周末。

实验内容从以下题目中选一题题目一、航空客运订票系统题目二、文章编辑题目三、宿舍管理查询软件题目四、校园导航系统题目五、散列法的实验研究题目六、小型图书馆管理系统(链表的插入,排序,查询,删除)题目七、学生搭配问题题目八、敢死队问题题目九、教学计划编制问题题目十、活期储蓄帐目管理题目十一、通讯录的制作题目十二、二叉排序树的实现题目十三、利用栈求表达式的值题目十四、走迷宫游戏题目十五、顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现题目十六、线索二叉树的应用题目十七、稀疏矩阵实现与应用题目十八、树的应用题目十九、图的遍历和生成树求解实现题目二十、排序综合题目二十一、纸牌游戏题目二十二、利用栈求表达式的值,可供小学生作业,并能给出分数题目二十三、数制转换问题题目二十四、停车场问题题目二十五、学生成绩管理系统题目二十六、哈夫曼编码/译码器题目二十七、特殊矩阵的压缩存储算法的实现题目二十八、产品进销存管理系统题目二十九、客户消费积分管理系统题目三十、约瑟夫环题目三十一、任意长的整数加法题目三十二、广义表的应用题目三十三、关键路径问题题目三十四、构造可以使n个城市连接的最小生成树题目三十五、神秘国度的爱情故事题目三十六、利用Hash技术统计C源程序中关键字的频度题目一、航空客运订票系统通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定);查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

数据结构 实验指导书——全部验证通过的噢

数据结构 实验指导书——全部验证通过的噢

《数据结构》实验指导院系专业:______________ 主讲教师:______________ 实验指导:______________姓名:______________ 学号:______________二O一五年九月目录实验一C语言的函数、数组、指针、结构体知识 (1)实验二顺序表的操作实验 (5)实验三链表的操作实验 (10)实验四栈的操作实验 (18)实验五队列的操作实验 (23)实验六二叉树的操作实验 (28)实验七静态表的查找操作实验 (35)实验八哈希表的查找操作实验 (42)实验九排序操作实验 (50)实验一C语言的函数、数组、指针、结构体知识一、实验目的1、复习C语言中函数、数组、指针、结构体与共用体等的概念。

2、熟悉利用C语言进行程序设计的一般方法。

二、实验的软硬件环境要求硬件环境要求:PC机(单机)使用的软件名称、版本号以及模块:Windows环境下的TurboC2.0以上或VC++ 等三、实验预习说明以下C语言中的概念1、函数:1、数组:3、指针:4、结构体5、共用体:四、实验内容和要求1、调试程序:输出100以内所有的素数(用函数实现)。

#include<stdio.h>int isprime(int n){ /*判断一个数是否为素数*/int m;for(m=2;m*m<=n;m++)if(n%m==0) return 0;return 1;}int main(){ /*输出100以内所有素数*/int i; printf("\n");for(i=2;i<100;i++)if(isprime(i)==1) printf("%4d",i);return 0;}运行结果:2、调试程序:对一维数组中的元素进行逆序排列。

#include<stdio.h>#define N 10int main(){int a[N]={0,1,2,3,4,5,6,7,8,9},i,temp;printf("\nthe original Array is:\n ");for(i=0;i<N;i++)printf("%4d",a[i]);for(i=0;i<N/2;i++){ /*交换数组元素使之逆序*/temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}printf("\nthe changed Array is:\n");for(i=0;i<N;i++)printf("%4d",a[i]);return 0;}运行结果:3、调试程序:在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的一个鞍点。

数据结构 实验指导手册

数据结构  实验指导手册

数学与计算机科学学院计算机科学与技术专业
《数据结构》课程实验
指导手册
目录
实验1:顺序表的定义及其相关操作算法的实现 (1)
实验2:链表的定义及其相关操作算法的实现 (2)
实验3:栈和队列的定义及其基本操作算法的实现 (4)
实验4:串模式匹配算法的设计与实现 (5)
实验5:二叉树的创建、遍历及其它基本操作的实现 (6)
实验6:哈夫曼树及哈夫曼编码的算法实现 (7)
实验7:查找算法的实现(1) (8)
实验8:查找算法的实现(2) (9)
实验9:几个主要排序算法的实现与比较 (10)
实验1:顺序表的定义及其相关操作算法的实现
实验2:链表的定义及其相关操作算法的实现
实验3:栈和队列的定义及其基本操作算法的实现
实验4:串模式匹配算法的设计与实现
实验5:二叉树的创建、遍历及其它基本操作的实现
实验6:哈夫曼树及哈夫曼编码的算法实现
实验7:查找算法的实现(1)
实验8:查找算法的实现(2)
实验9:几个主要排序算法的实现与比较。

【免费下载】广工数据结构实验指导书(2015春)

【免费下载】广工数据结构实验指导书(2015春)
习题的作用在于帮助学生深入理解教材内容 , 巩固基本概念, 达到培养良好程序设计能力和习 惯的目的。从认知的程度划分,数据结构的习题通常可分为三类:基础知识题、算法设计题和综 合实习题。基础知识题主要是检查对概知识的识记和理解,一般可作为学生自测题。算法设计 题的目的是练习对原理方法的简单应用,多数是要求在某种数据存储结构上实现某一操作,是数 据结构的基础训练,构成了课外作业的主体。综合实习题则训练对知识的综合应用和软件开发能 力,主要是针对具体应用问题,选择、设计、和实现抽象数据类型( ADT)的可重用模块,并以 此为基础开发满足问题要求的小型应用软件,应将其看作软件工程的综合性基础训练的重要一环, 给予足够的重视。
第 1 章 概述
1.1 课程、教材和实验
数据结构是计算机科学的算法理论基础和软件设计的技术基础,主要研究信息的逻辑结构及 其基本操作在计算机中的表示和实现。数据结构不仅是计算机专业的核心课程,而且已成为其他 理工专业的热门选修课。课程的教学要求之一是训练学生进行复杂程序设计的技能和培养良好程 序设计的习惯, 其重要程度决不亚于知识传授。因此,在数据结构的整个教学过程中 , 完成习题 作业和上机实习是两个至关重要的环节。
数据结构及其算法的教学难点在于它们的抽象性和动态性。虽然在书本教材和课堂授课(板 书或投影胶片)中采用图示可以在一定程度上化抽象为直观,但很难有效展现数据结构的瞬间动 态特性和算法的作用过程。 我们自主研发的“C 程序可视化运行调试集成环境 AnyviewC”,以及 基于 AnyviewC 开发的数据结构、C 程序设计、离散数学等课程的 “编程作业与实验可视化网络 平台”,打破了程序运行调试黑箱。学生可 通过 AnyviewC 平台可在线编写和可视化调试自己编写 的程序,并接受系统的实时自动测评,极大提高了学生程序设计训练的效率和效果 。教师也可从 繁重的书面作业批改工作中解脱出来,转到有针对性的现场指导和习题讲评上。借助于互联网, AnyviewC 平台将实验室“全天候”和“跨时空”地拓广到每位学生个人的微机或移动终端上 。

《数据结构 》实验指导书(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、实验内容按照邻接表对图进行创建,并运用图的深度优先遍历和图的广度优先遍历算法对所创建的无向图进行遍历。

《数据结构》实验指导书

《数据结构》实验指导书

《数据结构》实验指导书实验指导书课程名称:数据结构计算机科学与工程系《数据结构》课程组目录前言 .................................... 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

《数据结构》实 验 指 导 书.doc

《数据结构(C#)》实验指导书软件学院—、上机实验的指导思想和要求1.1 上机实验的目的上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。

上机实验的目的是:(1)加深对讲授内容的理解,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,通过多次上机,就能自然地、熟练地掌握。

(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C#程序开发的环境。

一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。

使用者应该了解为了运行一个C#程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。

每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快地学会。

(3)学会上机调试程序。

也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。

经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之。

而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人。

要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。

对程序设计来说,则要求会编程序并上机调试通过。

因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视。

调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”。

别人的经验不能代替自己的经验。

调试程序的能力是每个程序设计人员应当掌握的一项基本功。

因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变某些语句等),再进行编译、连接和运行。

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

五邑大学计算机学院数据结构实验指导手册2015年3月目录实验一线性表 (1)1.实验目的 (1)2.实验内容 (1)3.解题思路 (1)实验二栈 (4)1.实验目的 (4)2.实验内容 (4)3.解题思路 (4)实验三队列 (8)1.实验目的 (8)2.实验内容 (8)3.解题思路 (8)实验四二叉树 (12)1.实验目的 (12)2.实验内容 (12)3.解题思路 (12)实验五哈夫曼树 (18)1.实验目的 (18)2.实验内容 (18)3.解题思路 (18)实验六图的基本存储 (21)1.实验目的 (21)2.实验内容 (21)3.解题思路 (21)实验七图的应用 (26)1.实验目的 (26)2.实验内容 (26)3.解题思路 (26)实验八查找 (30)1.实验目的 (30)2.实验内容 (30)3.解题思路 (30)实验九排序 (32)1.实验目的 (32)2.实验内容 (32)3.解题思路 (32)说明 (36)附录实验报告模板 (37)实验一线性表1.实验目的(1)了解线性表的逻辑结构特性是数据元素之间存在着线性关系,在计算机中表示这种关系有顺序存储结构和链式存储结构;(2)掌握这两种存储结构的描述方法;(3)掌握线性表的基本操作(查找、插入、删除);(4)考虑时间和空间复杂度设计算法。

2.实验内容(1)创建一个顺序表,存放在数组A[N]中,元素的类型为整型,设计算法调整A,使其左边的所有元素小于0,右边的所有元素大于0(要求算法的时间复杂度和空间复杂度均为O(n))。

(2)建立一个循环单链表,其节点有prior,data和next三个域,其中data为数据域,存放元素的有效信息,next域为指针域,指向后继节点,prior为指针域,它的值为NULL。

编写一个算法将此表改为循环双链表。

3.解题思路(1)如图1-1所示,设立两个工作指针i和j,i由数组的左端向右移动,查找大于等于0的数,j由数组的右端向左端移动,查找小于0的数,然后交换,如图1-2所示,直到i>=j,调整结束。

图1-1图1-2算法描述(C语言)如下:void quickSwapList(int a[],int n){int i = 0, j = n - 1 ; // n为顺序表的长度,即数的个数while( i < j ){while( a[i] < 0 && i < j ) i ++ ; // 找到左边大于等于0的数while( a[j] >= 0 && i < j ) j -- ; // 找到右边小于0 的数if(i < j ) // 交换{int t = a[i] ; a[i] = a[j] ; a[j] = t ;}i++;j--;}}(2)如图1-3所示,已建有一个单循环链表(带头结点),first指向头结点。

设立两个工作指针p和q,分别指向头结点和第1个结点;执行q->prior=p;,建立第1个结点的前驱指针,如图1-4所示;同步移动工作指针p和q分别指向下一个结点,如图1-5所示,建立q指向结点的前驱,直到q==first为止,再将头结点的前驱设为最后一个结点,如图1-6所示。

图1-3图1-4图1-5图1-6算法描述(C语言)如下:void singleCircleToDoubleCircleLinkList(struct Node *first) {struct Node *p,*q;p=first; //工作指针p指向头结点q=first->next; //工作指针q指向第1个结点while(q!=first){q->prior=p; //置结点q的前驱为指针p指向的结点p=p->next; //移动工作指针pq=q->next; //移动工作指针q}q->prior=p; //置头结点的前驱为最后一个结点}实验二栈1.实验目的(1)理解栈的定义、特点及与线性表的异同;(2)熟悉顺序栈的组织方法,栈满、栈空的判断条件及其描述;(3)掌握栈的基本操作(进栈、退栈等)。

2.实验内容(1)设计一个算法,将一般算术表达式转化为逆波兰表达式,并求逆波兰表达式的值。

(2)设计两个栈S1、S2都采用顺序栈方式,并且共享一个存储区[0,MaxLen-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向、迎面增长的存储方式,如图2-1所示。

设计一个有关栈的入栈和出栈算法。

图2-13.解题思路(1)一般算术表达(中缀表达),如#3*(4+2)/2-5#,#为表达式界定符,逆波兰表达式(后缀表达式),如前述表达的后缀表达式为:3 4 2 + * 2 / 5 -。

设中缀表达式的运算符有+、-、*、/、#五种,运算符的优先级别从高到低为()、*、/、+、-、#;有括号先算括号内,再算括号外的,多层括号由内向外进行。

中缀表达式转换为后缀表达式需要用到一个临时栈optr暂存运算符。

转换算法描述(伪代码)如下:1.将栈optr初始化为#;2.从左至右依次扫描表达式的每个字符,执行下述操作2.1 若当前字符是运算对象,则输出该字符,处理下一个字符;2.2 若当前字符是运算符且优先级别比栈optr的栈顶运算符的优先级高,则将该字符入栈optr,处理下一个字符;2.3 若当前字符是运算符且优先级别比栈optr的栈顶运算符优先级别低,则将栈optr的栈顶元素弹出并输出;2.4 若当前字符是运算符且优先级别与栈optr的栈顶运算符的优先级相等,则将栈optr的栈顶元素弹出,处理下一个字符。

后缀表达式求值,由于后缀表达中所有的计算按运算符出现的顺序从左向右进行,不用再考虑运算符的优先级。

设定一个临时堆栈opnd暂存计算过程的中间结果。

后缀表达式计算算法描述(伪代码)如下:1.初始化栈opnd为空;2.从左到右依次扫描表达式的每一个字符,执行下述操作;2.1 若当前是运算对象,则入栈opnd,处理下一个字符;2.2 若当前字符是运算符,则从栈opnd出栈两个运算对象,执行运算并将结果入栈opnd,处理下一个字符;3.输出栈opnd的栈顶元素,即表达式的运算结果。

(2)两栈共享存储空间,需要解决的关键问题在于如何判断栈满和栈空,由于两栈共享存储空间,入栈和出栈的时候还需要区分是哪个栈。

设lsTop是左栈(数组下标为0的一端为栈底)栈顶指针,rsTop为右栈(数组下标为MaxLen-1的一端为栈底)栈顶指针,显然,当两个栈都为空时,lsTop==-1,rsTop==MaxLen,如图2-2所示;当栈满时,rsTop和lsTop存在以下关系:rsTop==lsTop+1,如图2-3所示。

图2-2图2-3入栈算法描述(C语言)如下://入栈,s=1,入左栈,s=2,入右栈,x为入栈元素void push(int s,int x){if(rsTop==lsTop+1)//栈满{printf("栈已满!\n");return;}if(s==1)//入左栈{lsTop++;dsStack[lsTop]=x;}else if(s==2)//入右栈{rsTop--;dsStack[rsTop]=x;}elseprintf("该栈不存在!\n");return;}出栈算法描述(C语言)如下://出栈,s=1,出左栈,s=2,出右栈,x返回出栈元素,成功函数返回1,否则返回0 int pop(int s,int *x){if(s==1)//出左栈{if(lsTop==-1){printf("栈已空!\n");return 0;}*x=dsStack[lsTop];lsTop--;}else if(s==2)//出右栈{if(rsTop==MaxLen){printf("栈已空!\n");return 0;}*x=dsStack[rsTop];rsTop++;}else{printf("该栈不存在!\n");return 0;}return 1;}实验三队列1.实验目的(1)理解队列的定义、特点及与线性表的异同;(2)熟悉队列的组织方法,队列满、队列空的判断条件及其描述;(3)掌握队列的基本操作(入队、出队等)。

2.实验内容(1)假设以数组sequ[MaxSize]存放环形队列的元素,同时Rear和Len分别指示环形队列中队尾元素的位置和内含元素的个数。

设计相应的入队和出队算法。

(2)某汽车轮渡口,过江渡船每次能载10辆车过江。

过江车辆分别为客车类和货车类,上船有如下规定:同类车先到先上船,客车先于货车上渡船,且每上4辆客车,才允许上一辆货车;若等待客车不足4辆则以货车代替;若无货车等待则允许客车都上船。

设计一个算法模拟渡口管理。

3.解题思路(1)解决问题的关键在于以下两点:如何使用软件的方法构造环形队列和如何通过Rear和Len来确定队头元素所在的位置。

对于第1点,通过模运算来实现,即Rear=(Rear+1)%MaxSize;第2个问题,当队尾元素的下标大于队头元素的下标时,如图3-1所示,显然,Rear-Len+1即为队头元素的下标;当队尾元素的下标小于队头元素的下标时,如图3-2所示,此时队头元素的下标为:(Rear+MaxSize)-Len+1;为使这两种情况统一处理,采用以下表达式来计算队头元素的下标:((Rear+MaxSize)-Len+1)%MaxSize。

队空和队满的问题通过Len的值即可判断出,Len=0显然是队空,Len=MaxSize则为队满。

图3-1图3-2环形队列入队算法描述(C语言)如下://入队void entryQueue(int x){if(Len==MaxSize)//队满{printf("队列已满,不能入队\n");return;}Rear=(Rear+1)%MaxSize;//移动队尾指针sequ[Rear]=x;//入队Len++;//长度加1return;}环形队列出队算法描述(C语言)如下://出队,返回出队元素int exitQueue(void){int x,First;//队头元素的下标if(Len==0)//队空{printf("队列已空,不能出队\n");return -1;}First=((Rear+MaxSize)-Len+1)%MaxSize;//计算队头元素的下标x=sequ[First];//获得队头元素Len--;//长度减1return x;//返回队头元素}(2)建立3个队列,分别为客车队列bus,货车队列truck和渡船队列ferry,设置3个变量标识已上渡船的客车数量busNum、货车数量truckNum和总数量totalNum。

相关文档
最新文档