LAB二叉树操作及应用.docVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Lab06.二叉树的操作及应用 【实验目的和要求】 1.掌握二叉树顺序存储表示的实现及其基本操作; 2.掌握线索二叉树类型的定义方法,会按对称序线索化二叉树和周游对称序线索二叉树; 3.掌握优先队列的实现及其基本操作; 4.掌握构造哈夫曼树的基本思想和哈夫曼树的数据结构设计,能编程实现哈夫曼树的构造; 5.掌握哈夫曼树的基本应用——哈夫曼编码。 【实验内容】 1.二叉树按顺序存储表示,编写一个C源程序,计算给定二叉树的叶结点数,并给出它的先根序列,或后根序列,或对称序列。 2.编写一个C源程序,对给定的二叉树,按对称序线索化该二叉树,并按对称序周游该对称序线索二叉树。 3. 编写一个C源程序,恰当定义优先队列,并对给定的优先队列,实现插入和删除最小结点的操作。 4.简述构造哈夫曼树的基本思想和哈夫曼树的数据结构设计,并编程实现哈夫曼树的构造。 5.简述哈夫曼编码的原理和方法,编程实现哈夫曼编码与解码。 【实验仪器与软件】 1.CPU主频在1GHz以上,内存在512Mb以上的PC; 2.VC6.0,Word 2003及以上版本。 实验讲评: 实验成绩: 评阅教师: 2012 年 月 日 Lab06.二叉树的操作及应用 一、顺序存储表示二叉树及其基本运算 其顺序表示为:首先要对它进行扩充,增加一些并不存在的空结点,使之成为一棵完全二叉树,然后再用一维数组顺序存储。 其存储表示为: struct SeqBinTree{/* 顺序二叉树类型定义*/ int MAXNUM /* 完全二叉树中允许结点的最大个数*/ int n; /* 改造成完全二叉树后,结点的实际个数*/ DataType *nodelist; /* 存放结点的数组*/ }; typedef struct SeqBinTree *PSeqBinTree; 二、对称序线索化该二叉树及其周游的实现 要按对称序周游对称序线索二叉树,首先找到对称序列中的第一个结点,然后依次找到结点的后继结点,直至其后继结点为空即可。 第一个结点也很容易找,只要从根结点出发沿着左指针不断往下走,直至左指针为空,到达“最左下”的结点,这就是对称序第一个结点。 找任意结点的对称序后继时,也非常容易做:一个结点的右指针字段如果是线索,则它就指向该结点在对称序下的后继;如果不是线索,则它指向该结点右子树的根,而该结点在对称序下的后继应是此右子树的最左下结点。 其编写程序如下: #includestdio.h #includestdlib.h #define MAX_SIZE 100 #define Link 0 #define Thread 1 typedef struct BiThrTreeNode { char info; struct BiThrTreeNode *l_link; struct BiThrTreeNode *r_link; int LTag,RTag; }BiThrTreeNode,*BiThrTree; typedef struct SeqStack { BiThrTree s[MAX_SIZE]; int t; }*PSeqStack; PSeqStack createEmptyStack_seq(void) { PSeqStack p_stack; p_stack=(PSeqStack)malloc(sizeof(struct SeqStack)); if(NULL==p_stack) { printf(\n out of space!\n); exit(-1); } else { p_stack-t=-1;//表示以满堆栈的方式存放数据 } return p_stack; } int isEmptyStack_seq(PSeqStack p_stack) { return p_stack-t==-1; } void push_seq(PSeqStack p_stack,BiThrTree bt) { if(p_stack-t=MAX_SIZE-1) { printf(\tOverflow!\n); exit(-1); } ++p_stack-t; p_stack-s[p_stack-t]=bt; } void pop_seq(PSeqStack p_stack) { if(p_stack-t==-1) { printf(\tUnderflow!\n);

文档评论(0)

ipad0c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档