数据结构实验指导书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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 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) 根据学号进行折半查找,要求使用非递归算法实现,成功返回此学生的姓名和成绩。