华科数据结构实验

合集下载

数据结构课程试验报告

数据结构课程试验报告

数据结构课程实验报告题目:哈夫曼编/译码器班级:电信0608姓名:彭飞学号:012006013517指导老师:刘玉数据结构实验报告华中科技大学电信系2007年12月目录1.需求分析 (1)2.概要设计 (2)2.1抽象数据类型定义 (2)2.2主程序 (2)2.3模块 (2)3.详细设计 (3)3.1哈夫曼编码类型 (3)3.2相关基本操作 (3)3.3主程序伪码算法 (9)3.4函数调用关系图 (11)4.调试分析 (12)5.用户手册 (13)6.测试结果 (14)7.附录 (16)一、需求分析1.哈夫曼编码对象为任意字符,包括数字及各种符号,通过统计用户输入字符串中个关键对象出现次数,建立相应的哈夫曼树。

2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”,用户由键盘输入数字命令,执行相应命令后显示操作结果。

3.程序执行的命令:1)建立哈夫曼树;2)求哈夫曼编码;3)打印哈夫曼树;4)对哈夫曼编码进行译码,提示用户输入合法编码;4.输入过程中能自动滤去合法字符以外的其他字符,并能在输入不当时输出相应的提示信息。

5.测试数据:1)输入:Hello!world!2)输出:见测试结果。

二、概要设计1.抽象数据类型的定义如下:ADT HuffmanTree{数据对象D:D={ai|ai∈Htnode型结点,i=1,2,…,n,n≥0}数据关系:R={<ai,ai.lchild>,<ai,ai.rchild>|ai∈D,i=2,3,…,n}基本操作:select(HuffmanTree HT,int n,int &s1,int &s2)初始条件:HT已存在。

操作结果:在树HT中的前n个结点中找出权值最小的两个结点分别记录在s1,s2上。

HuffmanCoding(HuffmanTree &HT,Weight *w,int m)初始条件:HT已存在。

华科数据结构二叉树实验报告

华科数据结构二叉树实验报告

华科数据结构二叉树实验报告华中科技大学(以下简称华科)是一所位于中国湖北省武汉市的顶尖高校。

作为计算机科学与技术专业的学生,我们在课程中学习了数据结构这门重要的课程。

在这学期的实验中,我们深入研究了二叉树这一数据结构,并进行了相关实验。

二叉树是一种常见的数据结构,它由节点构成,每个节点最多有两个子节点。

这种树的结构使得我们能够高效地操作和存储数据。

在本次实验中,我们主要关注二叉树的构建和遍历。

在实验的第一部分,我们需要实现一个二叉树的构建算法。

我们使用了C++语言来实现这个算法。

首先,我们定义了一个节点类,它包含了节点的值以及指向左右子节点的指针。

然后,我们编写了一个递归函数来构建二叉树。

这个函数接受一个数组作为输入,并根据数组中的元素构建二叉树。

我们通过递归地调用这个函数来构建每个节点的子树,直到所有的节点都被构建完毕。

在实验的第二部分,我们学习了二叉树的遍历算法。

二叉树的遍历可以分为三种方式:前序遍历、中序遍历和后序遍历。

前序遍历是指先访问根节点,然后按照先左后右的顺序遍历左右子树。

中序遍历是指先遍历左子树,然后访问根节点,最后遍历右子树。

后序遍历是指先遍历左右子树,最后访问根节点。

我们编写了相应的递归函数来实现这些遍历算法,并将遍历结果输出。

在实验的第三部分,我们进行了性能测试。

我们首先生成了一个包含一百万个随机整数的数组,并使用这个数组构建了一个二叉树。

然后,我们分别计算了使用前序、中序和后序遍历算法遍历这个二叉树所需的时间。

结果显示,中序遍历算法是最快的,而后序遍历算法是最慢的。

这是因为中序遍历算法的顺序与二叉树的结构最为吻合,而后序遍历算法需要先遍历左右子树才能访问根节点。

通过这次实验,我们深入了解了二叉树这一数据结构,并学会了如何构建和遍历二叉树。

我们还通过性能测试了解到不同遍历算法的效率差异。

这次实验让我们更加熟悉了数据结构的应用,并提高了我们的编程能力。

总之,通过这次实验,我们对二叉树有了更深入的了解。

华中科技大学C语言课程设计实验报告

华中科技大学C语言课程设计实验报告

华中科技大学计算机科学与技术学院《C语言程序设计》课程设计基础部分实验报告题目:科技成果信息管理系统专业:计算机科学与技术班级:1204学号:姓名:成绩:指导教师:目录一、系统功能结构设计 (1)二、数据结构设计 (1)三、程序结构 (4)四、函数原型及功能 (9)五、试验结果 (13)六、实验体会 (29)七、附录1:参考文献 (31)八、附录2:程序清单 (31)一、系统功能结构设计航科技成果信息管理系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。

如下图所示:二、数据结构设计1.单位信息链结点结构(DEPT_NODE)及用法typedef struct dept_node{char number[8];/*单位编号*/char name[30];/*单位名称*/char PIC[20];/*负责人*/struct dept_node *next;/*指向下一结点*/struct archs_node *achs;/*指向科技成果信息链结点的指针*/GtkTreeIter iter;/*treeview 中对应treeiter*/}DEPT_NODE;2.科技成果信息链结点结构(ACHS_NODE)及用法typedef struct achs_node {char number[12];/*成果编号*/char name[50];/*成果名称*/char field[20];/*所属技术领域*/char first_dept_name[30];/*第一完成单位*/char first_dept_number[8];/*第一完成单位编号*/char first_member_name[20];/*第一完成人*/char award_name[30];/*获奖名称*/char award_level[10];/*获奖档次*/char award_grade[10];/*获奖等级*/struct arhs_node *next;/*指向下一节点*/struct member_node *members;/*指向完成人员信息结点的指*/GtkTreeIter iter;/*treeview 中对应treeiter*/}ACHS_NODE;中文字段名类型及长度变量名举例成果编号char[12]numbe 200703150001成果名称char[40]name The_method_of_study 所属技术领域char[20]fieldcomputer第一完成单位char[30]first_dept_name Huazhong_university_of _sci&tech 第一完成单位编号first_dept_numberfirst_dept_number 43007401第一完成人char[20]first_member_name Lu_zhengding获奖名称char[30]award_name Natural_science_of_hub ie_province 获奖档次char[10]award_levelprovince/*省级*/中文字段名类型及长度变量名举例单位编号char[8]number 43007401单位名称char[30]name Huazhong_university_of_sci&tech 负责人char[20]PICLi_peigeng获奖等级int award_grade1/*一等奖*/3.完成人员信息链结点结构(MEMBER_NODE)及用法typedef struct member_node{char number[18];/*身份证号*/char name[20];/*姓名*/char dept_name[30];/*工作单位*/char sex[4];/*性别*/int age;/*年龄*/char title[15];/*职称*/int rank;/*成果排名*/char achs_name[40];/*所属成果名称*/struct member_node*next;/*指向下一个结点*/GtkTreeIter iter;/*treeview中对应treeiter*/}MEMBER_NODE;中文字段名类型及长度举例姓名char[20]number Lu_zhengding身份证号char[18]name420111************工作单位char[30]dept_name Huazhong_university_of_sci&tech 性别char sex m年龄int age60职称char[15]title professor成果排名int rank1所属成果名称char[40]achs_name The_method_of_study4.三方向的十字交叉链表结构……5.登陆窗体控件结构体(wgt)及用法struct login_widget{GtkWidget*window;//主窗体GtkWidget*label_tips;//用于信息提示的标签GtkWidget*button_login;//两个按钮,一个点击后登录,一个点击后退出GtkWidget*button_exit;GtkWidget*entry_username;//两个文本框,用于输入用户名和密码GtkWidget*entry_pwd;GtkWidget*label_username;//两个标签用于显示username文本框和password文本框提示GtkWidget*label_pwd;GtkWidget*vbox;//垂直布局盒子,包含以下三个水平布局盒子GtkWidget*hbox_username;//包含用户名提示标签和用户名文本框,下面的HBOX作用类似GtkWidget*hbox_pwd;GtkWidget*hbox_button;}wgt;说明:将登陆窗体相关控件独立成一个结构体6.指向3种节点的指针联合及用法typedef union nodep{struct dept_node*dept;struct achs_node*achs;struct member_node*member;}nodep;说明:用于3种结构都会用到但不会同时用到的情形7.两个传递参数的结构及其用法struct nodecreate{GtkWidget*window;GtkWidget*entry[9];nodep unp;int type;};struct query_judge{GtkWidget*entry;int flag;};说明:GTK信号连接g_signal_connected将函数与信号链接后之内传递一个参数给函数,所以定义这两个结构分别将几个参数结合在一起传递三、程序结构1.主程序运行流程开始登陆框出现输入用户名与密码主界面初始化加载数据或重新添加系统功能模块的选择及运行退出系统前提示保存链表数据清理内存中的缓存信息,关闭系统结束2.数据保存流程YNYNYN开始打开航班,经停机场,经停航班信息文件P1==NULL在文件1写入一条单位信息P2==NULLP1=P1->next在文件2写入一条科技成果信息P2=p2->nextP3==NULL关闭文件退出系统在文件3写入一条完成人员信息P3=p3->next结束3.添加流程4.单位查询流程5.统计50岁以下第一完成人流程Y NY NNNY开始调用统计函数statis_func3创建一个GtkListStore ,P1=gp_headP1==NULLP1=p1->next 获取第二级链表的链头指针p2=p1->achsP2==NULLP2=p2->next P3=MEMBER_search(p2->first_member_name,p2->members)P3->age<50插入liststore结束将ListStore 传递给Statis_info 展示出来四、函数原型及功能(所有GtkWidget*button参数均为与消息链接用)1.登陆模块//功能:登录框初始化函数//输入参数://返回值:无void init_login_widget()//功能:登录验证函数,点击login按钮时调用//输入参数://返回值:无void login(GtkWidget*widget,gpointer data)2.图形界面模块/**初始化部分变量,再依次调用各函数初始化界面各部分*/int main(int argc,char*argv[])/**初始化菜单栏*/void init_menubar(GtkWidget*menubar)/**初始化目录*/void create_view_and_model(void)/**初始化显示栏*/void init_show(GtkWidget*list)/**改变状态栏及显示栏*/void on_changed(GtkWidget*widget,gpointer statusbar)//功能:将选中的节点信息在显示栏中显示出来//输入参数:iter//返回值:无int Show_Node(GtkTreeIter iter)//值传递不影响selectediter/**对应3个节点显示的3个函数,返回对应GtkListStore*/ GtkListStore*Show_Dept(char*name);GtkListStore*Show_Achs(char*name,char*P_name);GtkListStore*Show_Member(char*name,char*P_name,char*PP_name);3.文件模块//功能:读取数据文件//输入参数://返回值:re的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadData(GtkWidget*button)//功能:读取数据文件中数据到链表中//输入参数:phead单位节点头指针的地址//返回值:re的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadList(DEPT_NODE**phead)//功能:将链表中节点添加到左侧树状列表中//输入参数://返回值:void rebuildtree()//功能:存储数据文件//输入参数://返回值:flag的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveData(GtkWidget*button)//功能:将链表中数据存储在数据文件中//输入参数:phead单位节点头指针//返回值:flag的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveList(DEPT_NODE*phead)//功能:推出前提示保存//输入参数://返回值:void quit_save(GtkWidget*button)4.查询模块//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget*button,int type)//功能:查询学院//输入参数:in包含iter和名称的结构//返回值:无void Query_Dept(GtkWidget*button,struct query_judge*in)//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget*button,int type)//功能:查询完成人员//输入参数:in包含iter和名称的结构//返回值:无void Query_Member(GtkWidget*button,struct query_judge*in)//功能:展开并跳转至指定iter//输入参数:iter treeview中的一个目标iter//返回值:无void expand_select(GtkTreeIter iter)//功能:按名称搜索单位//输入参数:D_name单位名称//返回值:单位节点指针DEPT_NODE*DEPT_search(char*D_name)//功能:按名称搜索科技成果节点//输入参数:A_name科技成果节点名称,ACHS所在学院头科技成果节点指针//返回值:科技成果节点节点指针ACHS_NODE*ACHS_search(char*A_name,ACHS_NODE*ACHS)//功能:按名称搜索完成人员节点//输入参数:M_name完成人员节点名称,ACHS所属科技成果头完成人员节点指针//返回值:完成人员节点节点指针MEMBER_NODE*MEMBER_search(char*M_name,MEMBER_NODE*MEMBER)5.添加模块//功能:弹出一个输入框//输入参数:type对应枚举的几种类型//返回值:无void entry_info(GtkWidget*button,int type)//功能:添加3种节点统一函数,由entry_info确定按钮调用//输入参数://返回值:无void Add_node(GtkWidget*button,struct nodecreate*nodec)//功能:插入科技成果节点函数,由Add_Node中情况3调用//输入参数:pNew指向新节点的指针//返回值:对应单位节点指针DEPT_NODE*insert_ACHS(ACHS_NODE*pNew)//功能:插入完成人员节点函数,由Add_Node中情况4调用//输入参数:pNew指向新节点的指针//返回值:对应科技成果节点指针ACHS_NODE*insert_MEMBER(MEMBER_NODE*pNew)6.删除模块//功能:删除3种节点统一函数,由“删除”按钮调用//输入参数://返回值:无void Del_Node(GtkWidget*button)//功能:删除单位节点,由Del_Node函数case2调用//输入参数:name单位名称//返回值:int1为有错,0为正常int Del_Dept(char*name)//功能:删除科技成果节点,由Del_Node函数case2调用//输入参数:name科技成果名称,P_name对应单位名称//返回值:int1为有错,0为正常int Del_Achs(char*name,char*P_name)//功能:删除完成人员节点,由Del_Node函数case4调用//输入参数:name完成人员名称,P_name对应科技成果名称,PP_name对应单位名称//返回值:int1为有错,0为正常int Del_Member(char*name,char*P_name,char*PP_name)7.编辑模块//功能:弹出一个编辑框//输入参数://返回值:无int Edit_info(GtkWidget*button)//功能:编辑节点//输入参数://返回值:无void Edit_Node(GtkWidget*button,struct nodecreate*nodec)8.统计模块//功能:弹出一个统计框,由传入参数设置具体内容//输入参数:title统计框标题,col1第一列标题,col2第二列标题,in传入的model//返回值:无void Statis_info(char*title,char*col1,char*col2,GtkListStore*in)//功能:统计各单位科技成果数量,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func1(GtkWidget*button)//功能:统计各单位完成人员成果排名,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func2(GtkWidget*button)//功能:统计所有50岁以下第一完成人,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func3(GtkWidget*button)9.帮助模块//功能:弹出软件信息及作者信息//输入参数://返回值:无void help_about(GtkWidget*button)五、试验结果编译环境:Ubuntu linux64位Mingw Gcc(源代码配置好后可跨平台编译)GTK版本:GTK+2.41开发IDE:Codeblocks12.111.系统登陆输对自动进入输错显示错误2.登陆成功进入主界面3.全屏模式4.读取数据5.读取成功6.添加单位(添加成功提示)7.添加科技成果8.添加完成人员9.添加错误返回信息(选中节点后点击左下角编辑按钮)弹出确认框12.查询单位查询成功,左侧已跳转至并展开机械学院查询成功,左侧已跳转至并展开网络磁盘阵列未查询到时弹出提示14.查询完成人员从头查询,跳转至并展开第一个张江点击查询,跳转至并展开第二个张江15.统计各单位科技成果总数及各类成果数16.统计各单位成果排名17.统计50岁以下第一完成人18.软件信息及作者信息19.退出前提示保存六、实验体会首先我看了一下实验书上的编程规范和几个基本模块的实现思想,但当我开始做的时候我发现光用face.c自己看不懂文本菜单操作肯定会有很多问题的,于是我想同样是学,不如直接学图形界面的开发。

华中科技大学-计算机学院-数据结构实验报告

华中科技大学-计算机学院-数据结构实验报告

华中科技大学-计算机学院-数据结构实验报告LT目录1基于顺序存储结构实现线性表的基本运算 (1)1.1 实验目的 (1)1.2 线性表演示系统设计 (1)1.2.1 系统总体设计 (1)1.2.2 有关常量和类型定义 (1)1.2.3 算法设计 (1)1.3 线性表演示系统实现与测试 (3)1.3.1 系统实现 (3)1.3.2 系统测试 (11)1.4 实验小结 (12)2 基于链式实现线性表的基本运算 (13)2.1 问题描述 (13)2.2 线性表演示系统设计 (13)2.2.1 系统总体设计 (13)2.2.2 有关常量和类型定义 (13)2.2.3 算法设计 (13)2.3 线性表演示系统实现与测试 (15)2.3.1 系统实现 (15)2.3.2 系统测试 (24)2.4 实验小结 (25)3基于顺序存储结构实现栈的基本运算 (27)3.1实验目的 (27)3.2栈演示系统设计 (27)3.2.1 系统总体设计 (27)3.2.2 算法实现 (27)3.3 栈演示系统实现与测试 (28)3.3.1 程序实现 (28)3.3.2 系统测试 (34)3.4 实验小结 (35)4基于循环队列存储结构实现队列的基本运算 (36)4.1 问题描述 (36)4.2.1 系统总体设计 (36)4.2.2 有关常量和类型定义 (36)4.2.3 算法设计 (36)4.3 队列演示系统实现与测试 (37)4.3.1 系统实现 (37)4.3.2 系统测试 (44)4.4 实验小结 (45)5基于二叉链表实现二叉树的基本运算 (46)5.1 实验目的 (46)5.2.1 系统总体设计 (46)5.2.2 有关常量和类型定义 (46)5.2.3 算法设计 (46)5.3 二叉树演示系统实现与测试 (48)5.3.1 系统实现 (48)5.3.2 系统测试 (79)5.4 实验小结 (81)6基于邻接表实现图的基本和常见运算 (82)6.1 实验目的 (82)6.2.1 系统总体设计 (82)6.2.2 有关常量和类型定义 (82)6.2.3 算法设计 (82)6.3 图演示系统实现与测试 (83)6.3.1 系统实现 (83)6.3.2 系统测试 (101)6.4 实验小结 (103)参考文献 (104)1基于顺序存储结构实现线性表的基本运算1.1 实验目的通过实验达到:(1)加深对线性表的概念、基本运算的理解;(2)熟练掌握线性表的逻辑结构与物理结构的关系;(3)物理结构采用顺序表,熟练掌握线性表的基本运算的实现。

数据结构课程设计同学通讯录系统

数据结构课程设计同学通讯录系统

华中科技大学计算机科学与技术学院《数据结构》课程设计报告院系:远程与继续教育学院专业:计算机科学与技术班级: 06 02 学号: 4200106530258 姓名:张鹏指导教师:周时阳2008年 3 月 20 日1、系统分析1.数据项目清单2.功能分析ⅰ)增加一个同学通讯数据Inputinfoⅱ)删除一个同学通讯数据deleteⅲ)修改一个同学通讯数据Modifyⅳ)浏览同学通讯录ShowAllⅴ)查询某同学通讯数据Search2、系统设计1、数据结构设计:由于是通讯录程序,平常最主要的操作应该在查询方面。

而链表不是一种随机读取的数据结构,会给查询带来一定的麻烦。

所以本程序采用静态数组顺序表的存储结构,来完成程序的数据存储。

2、模块设计:1、菜单设计:3、系统实现Main程序(框架)main() /*主菜单*/ {int i;char *index[N]={ "1.输入通讯资料", "2.显示所有资料", "3.搜索某人资料", "4.修改某人资料", "5.删除某人资料", "6.退出系统"};4、系统评价程序基本达到设计要求,由于使用了菜单功能,程序的操作更加直观,一般情况下能正确提示错误信息。

但是在测试中也发现软件的一些不足与缺陷,需要进一步修改和维护时予以纠正。

总的来说,程序在TC2.0和Win-TC下通过测试。

5、体会刚开始面对这项任务时,自己就有点无信心,因为这项任务量太大了,而且自己的C 语言学得不太好。

但后来在同学的帮助与鼓励下,自己翻书本,上网查找和上机实践,逐步地完成了这项作业。

通过本次实验,不仅使我所学数据结构的知识更加巩固,而且可以使理论与实践相结合,更好的掌握所学到的知识。

在编写程序的时候我也发现了自己很多的不足之处,例如在课堂上学的理论知识有的时候很难把它应用到实际程序中,看似一个简单的功能模块往往需要很多知识的融合。

华科数据库实验报告

华科数据库实验报告

课程实验报告课程名称:数据库系统概论专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录目录 (3)一、实验目的 (5)二、实验原理 (5)1.SQL Server 2008查询分析器 (5)2.DDL使用方法 (5)3.DML使用方法 (6)4.DCL 的使用方法 (7)5.数据库的备份和恢复 (8)三、实验内容 (9)实验1: 基本表的创建、数据插入 (9)实验2:数据查询 (10)实验3:数据修改、删除 (10)实验4:视图的操作 (10)实验5:库函数,授权控制 (10)实验6:数据库的备份、恢复 (11)四、实验过程 (11)实验1: 基本表的创建、数据插入 (11)实验2: 数据查询 (14)实验3: 数据修改、删除 (16)实验4:视图的操作 (18)实验5:库函数,授权控制 (19)实验6:数据库的备份、恢复 (20)五、心得体会 (21)一、实验目的掌握SQL Server 2008的工具使用掌握DDL的使用方法掌握DML的使用方法掌握SELECT命令使用方法掌握DCL的使用方法掌握数据库的备份和恢复二、实验原理1.SQL Server 2008查询分析器查询分析器是一个重要工具,实验中的所有SQL语言命令均需在查询分析器中输入、编辑运行。

2.DDL使用方法1)数据库创建在查询分析器中执行下列语句即可在默认的设备上创建新的数据库ems。

CREATE DATABASE database_name2)基本表的建立创建基本表的命令为:CREATE TABLE table_name,在该命令中定义主码和外码时,可以使用列约束(Column Constraint)或表约束(Table Constraint)子句。

创建基本表时,应先选择包含表的数据库。

3)视图的建立视图是组成数据库体系结构——三级模式两级映像结构中的外模式的基本单元,SQL-Server的视图定义命令为:CREATE VIEW view-name AS SELECT statement视图是用于定义终端用户数据来源的。

华中科技大学数据结构课程设计

华中科技大学数据结构课程设计

课程设计报告题目:基于堆的优先级队列ADT实现及其应用课程名称:专业班级:学号:姓名:指导教师:报告日期:2016年2月25日计算机科学与技术学院任务书设计内容传统队列是一种符合先插入的元素必须先删除(FIFO)的处理逻辑,这不总是满足应用要求;很多时候需要优先级高的任务先处理(即后插入的可能先删除)。

(1)基于堆的概念设计优先级队列(Priority Queue)抽象数据类型,至少包含Init_PriorityQue, Destroy_PriorityQue, Clear_PriorityQue,PriorityQue_Insert, PriorityQue_DeletMin, PriorityQue_Empty, PriorityQue_Full等操作;(2)选择适当的物理存储结构实现优先级队列ADT;(3)应用优先级队列ADT设计与实现一个医院门诊医师与病人看诊服务事件仿真程序,使医师服务效率尽量高。

设计要求(1)仿真事件(如病人到达,病情复杂度/就诊时间,病人离开等)可根据某种概率分布或随机模型生成。

(2)要求对各种算法进行理论分析,同时也对实测结果进行统计分析。

测试数据要求有一定规模。

(3)要求界面整洁、美观,操作方便。

参考文献[1] 严蔚敏, 吴伟民. 数据结构(C语言版). 北京: 清华大学出版社,1997[2] 严蔚敏, 吴伟民, 米宁. 数据结构题集(C语言版). 北京: 清华大学出版社,1999[3] Mark Allen Weiss.Data Structures and Algorithm Analysis in C, 机械工业出版社,2010, 177-192目录任务书 (I)1引言 (1)1.1课题背景与意义 (1)1.2课程设计的主要研究工作 (1)2系统需求分析与总体设计 (2)2.1系统需求分析 (2)2.2系统总体设计 (2)3系统详细设计 (3)3.1有关数据结构的定义 (3)3.2主要算法设计 (4)4系统实现与测试 (11)4.1系统实现 (11)4.2系统测试 (14)5总结与展望 (18)5.1全文总结 (18)5.2工作展望 (18)6体会 (19)附录 (20)1引言1.1课题背景与意义数据结构这门课对计算机专业的学生来说其重要性是毋庸置疑的。

华中科技大学数据结构实验报告

华中科技大学数据结构实验报告

华中科技大学数据结构实验报告课程实验报告课程名称:数据结构实验专业班级:信息安全201502学号:姓名:指导教师:报告日期:2016年10月28 日计算机科学与技术学院目录1基于顺序存储结构的线性表实现 (1)1.1问题描述 (1)1.2系统设计 (3)1.3系统实现 (7)1.4实验小结 (16)2 基于二叉链表的二叉树实现 (17)2.1问题描述 (17)2.2系统设计 (20)2.3系统实现 (23)2.4实验小结 (41)指导教师评定意见 (42)附录A 基于顺序存储结构线性表实现的源程序 (45)附录B 基于二叉链表二叉树实现的源程序 (53)1 基于顺序存储结构的线性表实现1.1 问题描述采用顺序表的物理结构,构造一个具有菜单的功能演示系统。

其中,在主程序中完成函数调用所需实参值的准备和函数执行结果的显示。

定义了线性表的初始化表、销毁表、清空表、判定空表、求表长和获得元素等基本运算对应的函数,并给出适当的操作提示显示,可选择以文件的形式进行存储和加载,即将生成的线性表存入到相应的文件中,也可以从文件中获取线性表进行操作。

1.1.1 线性表的基本概念线性表是最常用且最简单的一种数据结构,即n个数据元素的有限序列。

线性表中元素的个数n定义为线性表的长度,n=0时成为空表。

在非空表中的每个数据元素都有一个确定的位置,如a1是第一个数据元素,an是最后一个数据元素,ai是第i个数据元素。

线性表的存储结构分为线性存储和链式存储。

1.1.2 逻辑结构与基本运算线性表的数据逻辑结构定义如下:ADT List{数据对象:D={ai|ai∈ElemSet,i=1,2,……,n,n≥0}数据关系:R1={ <ai-1,ai> | ai-1,ai∈D,i=2,……,n}}依据最小完备性和常用性相结合的原则,以函数形式定义了包括线性表的初始化表、加载表、保存表、销毁表、清空表、判定空表、求表长、获得元素、查找元素、获得前驱、获得后继、插入元素、删除元素、遍历表 14 个基本运算,要求分别定义函数来实现上述功能,具体功能运算如下:⑴初始化表:函数名称是InitaList(L);初始条件是线性表L不存在已存在;操作结果是构造一个空的线性表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%d",&n);
}while(n <= 1);
for(i = 1;i<=n;i++)
{
getchar();
system("CLS");
printf("\n\t\t====================================\n");
printf("\t\t\t第%d个元素的=>\n\t\t\t\t结点的值:",i);
getch();
continue;
}
flag = 1;
switch(select)
{
case 1:n = HuffmanCreate(ht);break;
case 2:HuffmanCode(ht,hcd,n);break;
case 3:Huffmandecode(ht,hcd,n);break;
case 4:printf("\n\t\t\t谢谢使用!再见^ _ ^\n\n\t");
if(d.begin == 0) break;
}
hcd[i] = d;
}
printf("\t输出哈夫曼编码:\n");
for(i = 1;i <= n; i++)
{
printf("%c:",ht[i].data);
for(k = hcd[i].begin;k <= n; k++)
printf("%c",hcd[i].cd[k]);
ht[i].parent = ht[i].lchild = ht[i].rchild = 0;
for(i = n+1;i<= 2 * n - 1;i++)//产生新的Huffman节点
{
min1 = min2 = 32767;//min1和min2开始赋最大值
p1=p2=1;
for(k = 1;k<=i-1;k++)//在输入的节点中选取权值最小的值min1和min2
{
int min1,min2,p1,p2,i,k,n;
system("CLS");
printf("\t请输入要编码的数据的个数:");
scanf("%d",&n);
if(n <= 1)
do
{
printf("\n输入的数据元素个数太少!请重新输入!\n\n");
printf("\t请输入要编码的数据的个数:");
数据结构课程设计
哈夫曼编码和译码的实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAXNUM 100
/*哈夫曼结点的结构*/
typedef struct
{
char data;
int weight;
k = 1;
printf("\t输出哈夫曼译码:\n");
printf("\n");
while(k < m)
{
while(ht[f].lchild != 0)
{
if(ch[k] == '0')
f = ht[f].lchild;
if(ch[k] == '1')
f = ht[f].rchild;
k++;
exit(0);
}
}
return 0;
}
int parent;
int lchild;
int rchild;
}HuffNode;
/*哈夫曼编码存储结构*/
typedef struct
{
int cd[MAXNUM];//存放HUFFMAN编码的数组
int begin;
}HuffCode;
/*哈夫曼树的构造函数*/
int HuffmanCreate(HuffNode *ht)
printf("\t* *\n");
printf("\t* 1----------建立哈夫曼树*\n");
printf("\t* 2----------编码*\n");
printf("\t* 3----------译码*\n");
printf("\t* 4----------退出系统*\n");
printf("\t* *\n");
printf("\t请选择你所要实现的功能(请输入1~4数字):[ ]\b\b");
scanf("%d",&select);
if(select != 1 && select != 4 && flag == 0)
{
printf("\n\t~_~输入有误!请先选择建立哈夫曼树再选择其它功能!\n\n");
system("color 0A");
int n,select,flag = 0;
HuffNode ht[2*MAXNUM];
HuffCode hcd[MAXNUM];
while(1)
{
system("CLS");
fflush(stdin);
printf("\t\t\t哈夫曼编码译码系统");
printf("\n\t************************菜单***********************\n");
{
if(ht[k].parent == 0)
if(ht[k].weight < min1)//运用选择排序生成HUFFMAN树
{
min2 = min1;
p2 = p1;
min1 = ht[k].weight;
p1 = k;
}
else if(ht[k].weight < min2)
{
min2 =ht[k].weight;
{
d.begin = n + 1;
c = i;
f = ht[i].parent ;
while(f!=0)
{
if(ht[f].lchild == c)
d.cd[--d.begin] = '0';
else
d.cd[--d.begin] = '1';
c = f;
f = ht[i].parent ;
//printf("aaaaa=%d",d.begin);
scanf("%c",&ht[i].data);
printf("\t\t\t\t节点权重:");
scanf("%d",&ht[i].weight);
printf("\n\t\t====================================\n");
}
for(i = 1;i<= 2 * n - 1; i++)
printf("\t***************************************************\n");
printf("\t*电信班* U20 * *\n");
printf("\t***************************************************\n");
p2 = k;
}
}
ht[p1].parent = i;
ht[p2].parent = i;
ht[i].weight = min1 + min2;
ht[i].lchild = p1;
ht[i].rchild = p2;
}
printf("\n\n\n\t\t\t提示:哈夫曼树构建成功!\n\n\n\n");
printf("\t\n");
}
printf("\n提示:编码成功!\n");
printf("\t\n\n\n\n\n");
system("PAUSE");
}
/*哈夫曼译码函数*/
void Huffmandecode(HuffNode ht[],HuffCode hcd[], int n)
{
system("CLS");
}
printf("%c",ht[f].data);
f = 2 * n - 1;
}
printf("\t\n\n\n");
printf("提示:译码成功!\n\n");
system("PAUSE");
}
/*主函数*/
int main(int argc ,char *argv[])
{
system("CLS");
system("PAUSE");re Nhomakorabeaurn n;
}
/*哈夫曼编码函数*/
void HuffmanCode(HuffNode ht[],HuffCode hcd[],int n)
相关文档
最新文档