数据结构实验指导书2.
数据结构实验指导书(C++)-栈、队列、串的操作
数据结构实验指导书(C++)-栈、队列、串的操作实验二栈、队列、串的操作实验类型:验证性实验要求:必修实验学时: 2学时一、实验目的:参照给定的栈类和队列类的程序样例,验证给出的栈和队列的常见算法,并结合线性表类实现有关串的操作。
二、实验要求:1、掌握栈、队列、串的特点。
掌握特殊线性表的常见算法。
2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。
三、实验内容:1. 堆栈类测试和应用问题。
要求:(1)设计一个主函数实现对顺序堆栈类和链式堆栈类代码进行测试。
测试方法为:依次把数据元素1,2,3,4,5入栈,然后出栈堆栈中的数据元素并在屏幕上显示。
(2)定义数据元素的数据类型为如下形式的结构体:typedef struct{ char taskname[10];//任务名int taskno; //任务号}DataType;设计一个包含5个数据元素的测试数据,并设计一个主函数实现依次把5个数据元素入栈,然后出栈堆栈中的数据元素并在屏幕上显示。
2. 队列类测试和应用问题。
要求:设计一个主函数对循环队列类和链式队列类代码进行测试.测试方法为:依次把数据元素1,2,3,4,5入队,然后出队中的数据元素并在屏幕上显示。
3.设计串采用顺序存储结构,编写函数实现两个串的比较Compare(S, T)。
要求比较结果有大于、等于和小于三种情况。
*4. 设计算法利用栈类实现把十进制整数转换为二至九进制之间的任一进制输出。
*5. 设计串采用静态数组存储结构,编写函数实现串的替换Replace(S, start, T, V),即要求在主串S中,从位置start开始查找是否存在子串T,若主串S中存在子串T,则用子串V替换子串T,且函数返回1;若主串S中不存在子串T,则函数返回0。
并要求设计主函数进行测试。
一个测试例子为:S=”I am a student”,T=”student”,V=”teacher “。
《数据结构》实验教学指导书.
《数据结构》实验教学指导书数据结构是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。
基于以上的三点要求,在整本书中贯穿这样的中心思想:让读者通过数据结构的实验课,理论结合实践,达到这三点要求。
读者在使用这本书时,要以这三点要求为出发点,力求理解结构、掌握算法、读懂程序。
本书每个实验,都给出了明确的实验目的、简明的实验原理,限于篇幅,没有给出详细的说明,事实上也没有必要。
因为这些读者可以从课堂和书本上得到。
所以读者应该详细的读懂书上的相关部分,然后依据本书认真实验。
考虑到读者的水平的差异,本书给出了参考程序,所有的参考程序都已在TURBO C2.0上通过编译,结果正确,可以参考。
但是在上机时,应当注意避免输入参考程序了事,应当事先编写自己的程序,上机调试,参考程序只是用做参考。
另外,有些参考程序也不是最佳的,应对之进行改进处理。
实验时,还应多多考虑怎样将每一个实验应用到实际当中去,举一反三,可以不必拘泥于某一个实验,要前后贯通,注意对基本的数据结构的理解和普遍的算法的研究。
目录实验一熟悉C语言 (5)实验二线性表 (9)实验三栈 (14)实验四串 (17)实验五数组和广义表 (20)实验六树的操作(二叉树及其先序遍历) (24)实验七图的操作(邻接表的建立) (28)实验八排序 (33)数据结构课程名称:数据结构英文名称:Data Structures设置形式:非独立设课课程模块:专业核心课实验课性质:专业实验课程编号:501816课程负责人:邱秀伟大纲主撰人:邱秀伟大纲审核人:李焕勤一、学时、学分课程总学48实验学时:16课程学分:3时:二、适用专业及年级教育技术学三、课程目标与基本要求本课程学习的目的是使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,并初步了解对算法的时间分析和空间分析技术。
数据结构实验指导书(C版)
数据结构实验指导书(C语言版)2017年9月目录1、顺序表的实现 (1)2、链栈的实现 (3)3、前序遍历二叉树 (5)4、图的深度优先遍历算法 (7)5、散列查找 (9)1、顺序表的实现1. 实验目的⑴掌握线性表的顺序存储结构;⑵验证顺序表及其基本操作的实现;⑶理解算法与程序的关系,能够将顺序表算法转换为对应的程序。
2. 实验内容⑴建立含有若干个元素的顺序表;⑵对已建立的顺序表实现插入、删除、查找等基本操作。
3. 实现提示定义顺序表的数据类型——顺序表结构体SeqList,在SeqList基础上实现题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。
简单起见,本实验假定线性表的数据元素为int型,要求学生:(1)将实验程序调试通过后,用模板类改写;(2)加入求线性表的长度等基本操作;(3)重新给定测试数据,验证抛出异常机制。
4. 实验程序在编程环境下新建一个工程“顺序表验证实验”,并新建相应文件,文件包括顺序表结构体SeqList的定义,范例程序如下:#define MaxSize 100 /*假设顺序表最多存放100个元素*/typedef int DataType; /*定义线性表的数据类型,假设为int型*/typedef struct{DataType data[MaxSize]; /*存放数据元素的数组*/int length; /*线性表的长度*/} SeqList;文件包括建立顺序表、遍历顺序表、按值查找、插入操作、删除操作成员函数的定义,范例程序如下:int CreatList(SeqList *L, DataType a[ ], int n){if (n > MaxSize) {printf("顺序表的空间不够,无法建立顺序表\n"); return 0;} for (int i = 0; i < n; i++)L->data[i] = a[i];L->length = n;return 1;}void PrintList(SeqList *L){for (int i = 0; i < L->length; i++)printf("%d ", L->data[i]); /*输出线性表的元素值,假设为int型*/ }int Locate(SeqList *L, DataType x){for (int i = 0; i < L->length; i++)if (L->data[i] == x) return i+1; /*返回序号*/return 0; /*退出循环,说明查找失败*/ }int Insert(SeqList *L, int i, DataType x){if (L->length >= MaxSize) {printf("上溢错误,插入失败\n"); return 0;} if (i < 1 || i > L->length + 1) {printf("位置错误,插入失败\n"); return 0;} for (int j = L->length; j >= i; j--) /*j表示元素序号*/L->data[j] = L->data[j - 1];L->data[i - 1] = x;L->length++;return 1;}int Delete(SeqList *L, int i, DataType *ptr){if (L->length == 0) {printf("下溢错误,删除失败\n"); return 0;} if (i < 1 || i > L->length) {printf("位置错误,删除失败\n"); return 0;} *ptr = L->data[i - 1]; /*取出位置i的元素*/for (int j = i; j < L->length; j++) /* j表示元素所在数组下标*/L->data[j - 1] = L->data[j];L->length--;return 1;}在定义了顺序表的存储结构SeqList并实现了基本操作后,程序中就可以使用SeqList 类型来定义变量,可以调用实现基本操作的函数来完成相应的功能。
数据结构课程实验指导书
《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。
本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。
数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。
通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。
二、实验前的准备工作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.单击“保存”按钮保存源程序。
《数据结构》实验指导书
《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。
同时, 通过本课程的上机实习, 使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。
2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。
4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。
在程序调试通过后, 打印输出程序清单和运行结果。
5.上机结束后, 总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
分析程序的优缺点、时空性能以及改进思想, 写出心得体会。
实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。
要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。
数据结构-实验指导书
《数据结构》实验指导书计算机专业实验中心编2020年7月25日目录《数据结构》上机实验内容和要求............................. 错误!未定义书签。
实验一、顺序表的实现及应用................................. 错误!未定义书签。
实验二、链表的实现及应用................................... 错误!未定义书签。
实验三、栈的实现及应用..................................... 错误!未定义书签。
实验四、队列的实现及应用................................... 错误!未定义书签。
实验五、二叉树操作及应用................................... 错误!未定义书签。
实验六、图的遍历操作及应用................................. 错误!未定义书签。
实验七、查找算法的实现..................................... 错误!未定义书签。
实验八、排序算法的实现..................................... 错误!未定义书签。
《数据结构》上机实验内容和要求通过上机实验加深对课程内容的理解,增加感性认识,提高程序设计、开发及调试能力。
本实验指导书适用于16学时《数据结构》实验课,实验项目具体内容如下:实验报告要求请按照实验教师要求,按时提交实验报告电子版文件。
实验报告格式可个性化定义,内容包括但不限于以下内容:1、题目、姓名、学号、班级(首页)2、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。
3、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。
《数据结构》实验指导书(新)
数据结构实验指导书实验一线性表[实验目的]1.了解顺序表的结构特点及有关概念,掌握顺序表建立、插入、删除的基本操作算法。
2.了解单链表的结构特点及有关概念,掌握单链表建立、插入、删除的基本操作算法。
[实验内容]1.顺序表的实践。
1)建立4个元素的顺序表list[]={2,3,4,5},实现顺序表建立的基本操作。
2)在list[]={2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
3)在list[]={2,3,4,9,5}中删除指定位置(i=3)上的元素9,实现顺序表的删除的基本操作。
2.单链表的实践。
1)建立一个包括头结点和3个结点的(4,2,1)的单链表,实现单链表建立的基本操作。
2)在已建好的单链表中的指定位置(x=2)插入一个结点3,实现单链表插入的基本操作。
3)在一个包括头结点和4个结点的(4,2,3,1)的单链表的指定位置删除一个结点,实现单链表删除的基本操作。
[实验要点及说明]线性表(linear list)是n(n≥0)个数据元素a1,a2,…a n组成的有限序列。
其中n 称为数据元素的个数或线性表的长度,当n=0时称为空表,n>0时称为非空表。
通常将非空的线性表记为(a1,a2,…,a n),其中的数据元素a i(1≤i≤n)是一个抽象的符号,a i是第i个数据元素,称i为数据元素a i在线性表中的位置。
其具体含义在不同情况下是不同的,即它的数据类型可以根据具体情况而定,本书中,我们将它的类型设定为elemtype,表示某一种具体的已知数据类型。
顺序表也称为线性表的顺序存储结构。
其存储方式为:在内存中用一组地址连续的存储单元依次存储线性表的数据元素,但该连续存储空间的大小要大于或等于顺序表的长度。
一般让线性表中第一个元素存放在连续存储空间第一个位置,第二个元素紧跟着第一个之后,其余依此类推。
可定义顺序表如下:#define maxnumelemtype list[maxnum];int num=-1;线性表的链式存贮结构,也称为链表。
数据结构2实验指导书
《数据结构2—C语言版》实验指导书(第3版)姓名:学号:班级:商务班指导教师:石林山东建筑大学商学院电子商务教研室2010年3月实验1 串一、实验目的:掌握串的存储结构,以及对其的各种操作。
二、实验内容:实现串的模式匹配算法。
三、实验步骤:1、编程:参考程序。
int Index_KMP(SString S, SString T, int *next){ int i,j;i=1; j=1;while (i<=S[0] && j<=T[0]){if (j==0 || S[i]==T[j]){++i;++j;}else j=next[j];}if (j>T[0]) return i-T[0];else return 0;}2、调试所编辑的程序。
3、运行结果。
4、存盘。
四、注意事项:1、next函数的实现void get_next(SString S, int *next){int i,j;i=1; next[1]=0; j=0;while (i<S[0]){if (j==0 || S[i]==S[j]) {++i; ++j; next[i]=j;}else j=next[j];}}2、串结构的操作特点。
3、掌握串插入、求子串操作。
五、思考题1、描述串的快速模式匹配的算法。
实验2 二叉树一、实验目的:掌握二叉树的链式存储结构,以及对其的各种操作。
二、实验内容:实现二叉树的建立、遍历算法。
三、实验步骤:1、编程:参考程序。
节点结构:Typedef struct BiTNode{int data;Struct BiTNode *lchild, *rchild;}BiTNode, * BiTree;先序遍历:BiTree CreatBiTree(){ BiTree T;scanf(&ch);if(ch= =¢ ¢) T=NULL;else {T=(BiTNode*)malloc(sizeof((BiTNode));T->data=ch; /*生成根结点*/T->lchild= CreatBiTree( ); /*构造左子树*/T->rchild= CreatBiTree(); /*构造右子树*/}return (T) ;}2、调试所编辑的程序。
《数据结构》实验指导书(新教学计划)
数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)实验题目 (3)实验一单链表的插入、删除 (3)[实验目的] (3)[实验内容] (3)[测试数据] (3)[实现提示] (3)实验二栈及其应用 (5)[实验目的] (5)[实验内容] (5)[测试数据] (5)实验三二叉树的递归算法 (5)[实验目的] (5)[实验内容] (6)[测试数据] (6)实验四查找及排序算法的应用 (7)[实验目的] (7)[实验内容] (7)[测试数据] (7)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。
本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。
本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。
由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。
由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。
为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。
数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。
在掌握基本算法的基础上,掌握分析、解决实际问题的能力。
通过实验实践内容的训练,突出构造性思维训练的特征, 提高学生组织数据及编写大型程序的能力。
数据结构实验指导书v2
目录实验一线性表................................................................................................................. 错误!未定义书签。
(一) 实验目的............................................................................................................... 错误!未定义书签。
(二) 实验内容............................................................................................................... 错误!未定义书签。
(三) 实验报告............................................................................................................... 错误!未定义书签。
实验二堆栈..................................................................................................................... 错误!未定义书签。
(一) 实验目的............................................................................................................... 错误!未定义书签。
(二) 实验内容............................................................................................................... 错误!未定义书签。
数据结构实验指导书
数据结构实验指导书一、实验目的本实验旨在通过实践操作,加深对数据结构的理解,掌握数据结构的基本操作和算法设计。
二、实验内容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.1编写实验报告的基本要求1.1.1问题描述这一部分需要简要介绍课题的内容,即实验将要做什么。
1.1.2算法描述这一部分需要详细描述解决问题需要用到算法和重要的数据结构,即该实验到底应该怎么做。
基本要求:应清楚地描述处理问题所用的关键算法,而不仅仅是主要功能。
算法和数据结构可以用伪代码和图表来描述。
不要只写源代码和注释。
1.1.3试验结果这一部分内容需要紧扣实习的题目类型和要求,涉及提供相应的测试方法和结果。
对于需要通过某种算法解决的问题,需要设计并填写测试用例表。
每个测试用例通常包括以下内容:(1)测试输入:设计一组输入数据;(2)测试目的:设计此输入的目的是测试程序中可能存在的漏洞;(3)正确输出:应该输入的内容。
如果程序正确,则应将其输出;(4)实际输出:数据输入后实际测试得到的输出;(5)错误原因:如果实际输出与正确输出不符,需分析产生错误的可能原因;(6)当前状态:可分为三种状态:通过(实际输出与正确输出一致)、已纠正(实际输出与正确输出不一致,但现在已正确修改)和待修改(实际输出与正确输出不一致,尚未纠正);(7)测试结果分析:需要详细解释测试策略,对得到的数据进行分析,总结出算法的时空复杂度,得出自己对算法性能等方面分析的结论。
附录:源代码源代码列在附录中。
节目风格要求清晰易懂,有足够的评论。
如果有意义的注释行少于代码的30%,则不会评分。
1.2实习作业的提交要求每个实习项目完成后,学生应根据实验报告的格式和内容要求提交一份实验报告(印刷版),同时提交一份压缩电子数据。
电子数据应按如下方式包装:学号姓名.rar文件夹:包括实验报告的电子版源代码文件代码文件夹:源代码文件对应的可执行文件readme.txt文件,告知如何编译源代码,生成可执行文件2.1实验项目2.1.1通讯录管理问题描述:设计一个计算机程序来实现地址簿管理。
设计要求:1.设计一个含有6个菜单项的主控菜单,这6个菜单项的内容和输入提示如下:1建立通讯录2插入通讯录节点3查询通讯录节点4删除通讯录节点5输出通讯录0退出管理系统。
数据结构实验指导书实验二
数据结构实验指导书实验二验实验 2 堆栈与队列(2 学时)实验目的 1.定义顺序栈和链栈的结点类型。
2.掌握栈的插入和删除结点在操作上的特点。
3.熟悉对栈的一些根本操作和具体的函数定义。
4.定义顺序队列和链队列的结点类型。
实验内容堆栈的操作 1.该程序的功能是实现顺序栈的定义和操作。
该程序包括定义的栈结构类型以及对每一种栈操作的具体的函数定义和主函数。
/* 定义 DataType 为 int 类型 */ typedef int DataType; /* 栈的结点类型 */ #define MAXSIZE 1024 typedef struct {DataType data[MAXSIZE]; int top; }SeqStack; /* 初始化顺序栈 */ SeqStack SeqStackInit() /* 检查顺序栈是否为空 */ int SeqStackEmpty(SeqStack S) /* 把 S 置为空栈 */ void ClearStack(SeqStack *S) /* 把元素 x 压入栈,使其成为新的栈顶元素 */ void SeqStackPush(SeqStack *S,DataType x) /* 把栈顶元素弹出 */ DataType SeqStackPop(SeqStack *S) /* 取栈顶元素 */ DataType SeqStackGetTop(SeqStack S) /*输出顺序栈中的元素*/ void SeqStackPrint(SeqStack S) 2.试利用堆栈将队列中的元素逆置。
3.编写括号匹配算法。
* 队列的操作 1. 队列的根本操作:InitQueue(&Q) 构造一个空队列 Q QueueEmpty(Q) 判断队列是否为空 QueueLenght(Q) 返回队列 Q 的元素个数,即队列的长度GetHead(Q,&e) 取队列 Q 的队头元素,并用 e 返回EnQueue(&Q,e) 将元素 e 入队列 DeQueue(&Q,&e) 删除非空队列Q 的队头元素,并用 e 返回其值 2. 队列的表示:队列有两种表示方法:链队列、循环队列(顺序队列)。
数据结构实验指导书
实验一线性表的基本操作一、实验目的线性表是最简单的一种线性结构,它有两种存储方法:顺序存储和链式存储。
实验目的如下:1、会定义线性表的顺序存储结构和链式存储结构。
2、熟悉顺序表和链表的一些基本操作和应用。
3、加深对线性表的理解,逐步培养解决实际问题的编程能力。
二、实验环境运行C或VC++的微机。
三、实验内容1.基本操作:●初始化线性表●向线性表指定位置插入元素●删除指定元素值的线性表记录●删除指定位置的线性表记录●查找线性表中的元素●输出线性表元素2.提高题目(1)已知线性表LA的数据元素(n个,n为偶数),现要求将LA 拆开成两个新的线性表LB,LC。
要求LB中的数据元素为LA中的奇数位序的数据元素(a1, a3, …, a n-1),LC中的数据元素为LA中的偶数位序的数据元素(a2, a4, …, a n)。
2. 已知线性表LA的数据元素(n个),现要求将LA的数据元素复制到另一个线性表LB中。
3. 设有一个线性表采用顺序存储结构,表中的数据元素值为正整数(n个)。
设在O(n) 时间内,将线性表分成两为两部分,其中左半部分每个元素都小于原表的第一个元素,而右半部分则相反。
4. 将一个头结点指针为a的单链表A分解成两个单链表A和B,其头结点指针分别为a和b,使得A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。
5. 约瑟夫问题:设编号为1,2,…,n的n(n>0)个人按顺时针方向围坐一圈,每人持有一正整数密码。
开始时任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到m 时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新从1报数。
如此下去,直到所有人全部出列为止。
令n最大值取30。
要求设计一个程序模拟此过程,求出出列编号序列(采用循环单链表结构)。
四、实验报告所有的基础操作和5到题目都需要课堂检查,直接打分。
最新数据结构实验指导书
《数据结构》实验指导书(适用于计算机科学与技术、网络工程、软件工程专业)计算机科学与技术学院软件教研室2006-8目录前言 (3)实验一、单链表的基本操作 (4)实验二、二叉树的遍历 (6)实验三、折半查找和二叉排序树 (8)实验四、内部排序 (10)前言《数据结构》是计算机科学与技术、网络工程等专业的专业基础必修课,主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法进行分析和评价。
本课程的学习应使学生深刻地理解数据结构的逻辑结构和物理结构的基本概念及有关算法,培养学生基本的、良好的程序设计技能以及针对具体问题,选择适当的数据结构,设计出有效算法的能力。
《数据结构》是一门理论和实践相结合的课程,它在整个计算机专业教学体系中处于举足轻重的地位,是计算机科学的算法理论基础和软件设计的技术基础,其上机实验的目的主要是编程实现数据结构各章的主要算法,训练学生实际动手进行程序设计和程序调试的能力,加深对数据结构相关概念和算法的理解。
实验一、单链表的基本操作一、实验目的1、掌握线性链表的操作特点,即指针是逻辑关系的映像。
2、掌握动态产生单链表的方法。
3、熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。
4、熟练掌握单链表的取元素操作二、实验内容1、定义单链表类型并动态创建单链表2、实现线性表链式存储结构下元素的插入操作3、实现线性表链式存储结构下元素的删除操作4、实现线性表链式存储结构下取元素操作三、实验环境TC或VC++或Java四、实验步骤1、单链表的存储定义2、从键盘上依次输入21、18、30、75、42、56,逆序创建单链表,并输出单链表中的各元素值。
3、分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。
4、删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。
5、取单链表中的第5个数据元素和第7个数据元素五、问题讨论1、单链表具有什么优缺点?2、单链表的定义与顺序表的定义有什么区别?3、逆序创建单链表有什么好处?4、为什么单链表中取元素、插入和删除操作在开始不判断给定位置i的合法性?5、如何改进单链表的定义,使其可以在操作前判断判断给定位置i的合法性?六、实验报告内容1、实验目的2、实验内容和具体要求3、完成情况和实验记录,实验记录为实验过程中遇到的问题及解决方法4、程序清单5、所输入的数据及相应的运行结果6、问题回答7、实验心得实验二、二叉树的遍历一、实验目的1、掌握二叉树的特点及其存储方式。
《数据结构》实验指导书(C语言版)(浦江学院)
实验1: 顺序表的操作实验一、实验名称和性质二、实验目的1.掌握线性表的顺序存储结构的表示和实现方法。
2.掌握顺序表基本操作的算法实现。
3.了解顺序表的应用。
三、实验内容1.建立顺序表。
2.在顺序表上实现插入、删除和查找操作(验证性内容)。
3.删除有序顺序表中的重复元素(设计性内容)。
四、实验的软硬件环境要求硬件环境要求:PC机(单机)使用的软件名称、版本号:Windows环境下的VC++6.0五、知识准备前期要求熟练掌握了C语言的编程规则、方法和顺序表的基本操作算法。
六、验证性实验1.实验要求编程实现如下功能:(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。
(2)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。
(3)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。
(4)在顺序表中查找值为e的数据元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。
2. 实验相关原理线性表的顺序存储结构称为顺序表,顺序表的存储结构描述为:#define MAXLEN 30 /*线性表的最大长度*/typedef struct{Elemtype elem[MAXLEN]; /*顺序表中存放元素的数组,其中elemtype为抽象数据类型,在程序具体实现时可以用任意类型代替*/int length; /*顺序表的长度,即元素个数*/}Sqlist; /*顺序表的类型*/【核心算法提示】(1)顺序表插入操作的基本步骤:要在顺序表中的第i个数据元素之前插入一个数据元素x,首先要判断插入位置i是否合法,假设线性表的表长为n,则i的合法值范围:1≤i ≤n+1,若是合法位置,就再判断顺序表是否满,如果满,则增加空间或结束操作,如果不满,则将第i个数据元素及其之后的所有数据元素都后移一个位置,此时第i个位置已经腾空,再将待插入的数据元素x插入到该位置上,最后将线性表的表长增加1。
数据结构实验指导书2
北京林业大学实验任务书备注:实验共分4次,其中实验1――实验3为设计性实验,实验4为综合性实验,具体安排下面一一列出。
北京林业大学10学年—11学年第 2学期数据结构实验任务书专业名称:实验学时: 4课程名称:数据结构任课教师:李冬梅实验题目:线性表的基本操作实验环境: Visual C++实验目的:1、掌握线性表的定义;2、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:(1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 根据姓名进行查找,返回此学生的学号和成绩;(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);(5) 给定一个学生信息,插入到表中指定的位置;(6) 删除指定位置的学生记录;(7) 统计表中学生个数。
实验提示:学生信息的定义:typedef struct {char no[8]; //8位学号char name[20]; //姓名int price; //成绩}Student;顺序表的定义typedef struct {Student *elem; //指向数据元素的基地址int length; //线性表的当前长度}SqList;链表的定义:typedef struct LNode{Student data; //数据域struct LNode *next; //指针域}LNode,*LinkList;实验要求:(1) 程序要添加适当的注释,程序的书写要采用缩进格式。
(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。
数据结构实验指导书
《数据结构与算法》实验指导书实验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)掌握单链表的逻辑结构、存储结构及描述方式。
《数据结构》实 验 指 导 书.doc
《数据结构(C#)》实验指导书软件学院—、上机实验的指导思想和要求1.1 上机实验的目的上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。
上机实验的目的是:(1)加深对讲授内容的理解,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,通过多次上机,就能自然地、熟练地掌握。
(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C#程序开发的环境。
一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。
使用者应该了解为了运行一个C#程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。
每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快地学会。
(3)学会上机调试程序。
也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。
经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之。
而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人。
要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。
对程序设计来说,则要求会编程序并上机调试通过。
因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视。
调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”。
别人的经验不能代替自己的经验。
调试程序的能力是每个程序设计人员应当掌握的一项基本功。
因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变某些语句等),再进行编译、连接和运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京林业大学实验任务书备注:实验共分4次,其中实验1――实验3为设计性实验,实验4为综合性实验,具体安排下面一一列出。
北京林业大学10学年—11学年第 2学期数据结构实验任务书专业名称:实验学时: 4课程名称:数据结构任课教师:李冬梅实验题目:线性表的基本操作实验环境: Visual C++实验目的:1、掌握线性表的定义;2、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:(1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 根据姓名进行查找,返回此学生的学号和成绩;(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);(5) 给定一个学生信息,插入到表中指定的位置;(6) 删除指定位置的学生记录;(7) 统计表中学生个数。
实验提示:学生信息的定义:typedef struct {char no[8]; //8位学号char name[20]; //姓名int price; //成绩}Student;顺序表的定义typedef struct {Student *elem; //指向数据元素的基地址int length; //线性表的当前长度}SqList;链表的定义:typedef struct LNode{Student data; //数据域struct LNode *next; //指针域}LNode,*LinkList;实验要求:(1) 程序要添加适当的注释,程序的书写要采用缩进格式。
(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。
(5) 上传源程序和实验报告到ftp的相应班级所在文件夹。
顺序表的源程序保存为SqList.cpp,链表的源程序保存为LinkList.cpp,实验报告命名为:实验报告1.doc。
源程序和实验报告压缩为一个文件(如果定义了头文件则一起压缩),按以下方式命名:学号姓名.rar,如070814101薛力.rar。
北京林业大学10学年—11学年第 2 学期数据结构实验任务书专业名称:实验学时: 4课程名称:数据结构任课教师:李冬梅实验题目:栈的应用-算术表达式求值实验环境: Visual C++ 6.0实验目的:1.掌握栈的定义及实现;2.掌握利用栈求解算术表达式的方法。
实验内容:通过修改完善教材中的算法3.4,利用栈来实现算术表达式求值的算法。
对算法3.4中调用的几个函数要给出其实现过程:(1) 函数In(c):判断c是否为运算符;(2) 函数Precede(t1,t2):判断运算符t1和t2的优先级;(3) 函数Operate(a,theta,b):对a和b进行二元运算theta。
程序运行时,输入合法的算术表达式(中间值及最终结果要在0~9之间,可以包括加减乘除和括号),便可输出相应的计算结果。
如下图:实验提示:(仅供参考,每个函数的具体实现可以有多种方法,希望有创新)1. 将栈的定义和实现单独保存在头文件“stack.h”中,然后在表达式求值的源程序sy2.cpp中包含此头文件(即#include“stack.h”)。
2.表达式求值源程序sy2.cpp的具体实现(1) 主函数如下:void main(){cout<<"请输入算术表达式,并以#结束."<<endl;cout<<EvaluateExpression()<endl;}(2) 函数EvaluateExpression的实现见算法3.10(3) 函数In(c)的实现可以采用以下方式:Status In(SElemType c)//应在前面有定义typedef char SElemType;{ // 判断c是否为运算符switch(c){case'+':return TRUE;……//补充完整default:return FALSE;}}(4) 函数Precede(t1,t2)的实现可以采用以下形式:SElemType Precede(SElemType t1,SElemType t2){ //根据教材表3.1,判断两个运算符的优先关系SElemType f;switch(t2){case '+':case '-':if(t1=='('||t1=='#')f='<';elsef='>';break;……//补充完整}return f;}(5) 函数Operate(a,theta,b)的实现可以采用以下方式:SElemType Operate(SElemType a,SElemType theta,SElemType b){SElemType c;a=a-48;b=b-48;switch(theta){case'+':c=a+b+48;break;……//补充完整}return c;}选做内容1:进一步改进,使表达式的中间值及最终结果不局限于0~9之间的个位数。
(如果完成要在实验报告中注明),如下图:选做内容2:将表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。
将中缀表达式转化成后缀表达式存储在队列中,然后利用后缀表达式求表达式的值并输出。
●将中缀表达式转化成后缀的思想:(1)创建一空队列,用来存放后缀表达式,建立并初始化操作符栈OPTR,将表达式起始符“#”压入OPTR栈。
(2)依次读入表达式中每个字符ch,循环执行(3)至(5),直至求出整个表达式转换完毕。
(3)取出OPTR的栈顶元素,当OPTR的栈顶元素和当前读入的字符ch均为“#”时,整个中缀表达式转换完毕。
(4)若ch不是运算符,则进队,读入下一字符ch。
(5)若ch是运算符,则根据OPTR的栈顶元素和ch的优先权比较结果,做不同的处理。
①若是小于,则ch压入OPTR栈,读入下一字符ch。
②若是大于,则弹出OPTR栈顶的运算符,进队。
③若是等于,则OPTR的栈顶元素是“(”且ch是“)”,这时弹出OPTR栈顶的“(”,相当于去掉括号,然后读入下一字符ch。
●对后缀表达式进行计算的具体步骤为:建立一个栈S从左到右读后缀表达式,读到数字就将它转换为数值压入栈S中,读到运算符则从栈中依次弹出两个数分别到Y和X,然后以“X运算符Y”的形式计算出结果,再压进栈S中。
如果后缀表达式未读完,重复执行上面过程,最后输出栈顶的数值即可结束。
实验要求:(1) 程序要添加适当的注释,程序的书写要采用缩进格式。
(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。
(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出表达式求值算法的流程图。
(5) 将栈的定义和实现单独保存在一个头文件“stack.h”中,表达式求值的源程序保存为“calculator.cpp”,实验报告命名为“实验报告2.doc”。
将stack.h、calculator.cpp 和“实验报告2.doc”三个文件压缩为一个文件,按以下方式命名:学号姓名.rar,上传到ftp的相应班级所在文件夹。
北京林业大学10学年—11学年第 2 学期数据结构实验任务书专业名称:实验学时: 4课程名称:数据结构任课教师:李冬梅实验题目:哈夫曼编码算法的实现实验环境: Visual C++实验目的:1.掌握二叉树的定义;2.掌握哈夫曼树和哈夫曼编码算法的实现。
实验内容:实现一个哈夫曼编码系统,系统包括以下功能:(1) 字符信息统计:读取待编码的源文件SourceFile.txt,统计出现的字符及其频率。
(2) 建立哈夫曼树:根据统计结果建立哈夫曼树。
(3) 建立哈夫曼码表:利用得到的哈夫曼树,将各字符对应的编码表保存在文件Code.txt中。
(4) 对源文件进行编码:根据哈夫曼码表,将SourceFile.txt中的字符转换成相应的编码文件ResultFile.txt。
实现提示:(1)字符信息统计:假设源文件SourceFile.txt中的字符只有大小写英文字母(同一个字母的大小写看作一个字符),则字符统计算法的实现过程可以归纳为:先定义一个含有26个元素的整形数组,用来存储各个字母出现的次数,最后还要排除其中出现次数为0的数组元素。
(2) 建立哈夫曼树:参考教材算法5.10,补充函数Select的实现。
(3) 建立哈夫曼码表:参考教材算法5.11,将编译表HC中的内容写到文件Code.txt中。
(4) 对源文件进行编码:依次读入文件SourceFile.txt中的字符 c,在编码表 HC 中找到此字符,将字符c转换为编码表中存放的编码串,写入编码文件ResultFile.txt中,直到所有的字符处理完毕为止。
选做内容:完成译码功能:对任意一个给定的由01组成的文件,根据哈夫曼码表翻译成由字符组成的源文件。
提示:对文件进行译码的过程必须借助于哈夫曼树。
具体过程是:依次读入文件的二进制码,从哈夫曼树的根结点(即HT[m])出发,若当前读入0,则走向左孩子,否则走向右孩子。
一旦到达某一叶子HT[i]时便译出相应的字符编码HC[i]。
然后重新从根出发继续译码,直至文件结束。
实验要求:(1) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。
(2) 程序要添加适当的注释,程序的书写要采用缩进格式。
(3)待编码的源文件命名为SourceFile.txt,中,源程序保存为“Huffman.cpp”,实验报告命名为“实验报告3.doc”。
将这三个文件压缩为一个文件,按以下方式命名:学号姓名.rar,上传到ftp的相应班级所在文件夹。
北京林业大学10学年—11学年第 2学期数据结构实验任务书专业名称:实验学时: 4课程名称:数据结构任课教师:李冬梅实验题目:学生管理系统的设计与实现实验环境:实验目的:1.掌握重要的排序算法――插入排序和快速排序;2.掌握折半查找算法。
3. 综合运用所学数据结构知识,提高解决实际问题的能力。
实验内容:设计并实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的的顺序表,可以不考虑重名的情况,系统至少包含以下功能:(1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 给定一个学生信息,插入到表中指定的位置;(4) 删除指定位置的学生记录;(5) 统计表中学生个数;(6) 利用直接插入排序或者折半插入排序按照姓名进行排序;(7) 利用快速排序按照学号进行排序;(8) 根据姓名进行折半查找,要求使用递归算法实现,成功返回此学生的学号和成绩;(9) 根据学号进行折半查找,要求使用非递归算法实现,成功返回此学生的姓名和成绩。