数据结构与算法实验指导书.docx
《数据结构与算法实验指导书.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实验指导书.docx(41页珍藏版)》请在咨信网上搜索。
1、上连第Z三堂大竽徽据牯构与算法实脸播导行计算机与信息学院实验三树【实验目的】【实验平台】操作系统:开发环境:熟练掌握在链式二叉树在二叉链表存储结构上的基本操作。Windows2000 或 Windows XPC 或 C+【实验内容及要求】要求采用二叉链表作为存储结构,完成二叉树的建立,前序、中序和后序遍历的操作,求所 有叶子及结点总数的操作等。具体实现要求:17 .基于先序遍历的构造算法:输入是二叉树的先序序列,但必须在其中加入虚结点以示空指针 的位置。假设虚结点输入时用空格字符表示。18 .用广义表表示所建二叉树。19 .分别利用前序遍历、中序遍历、后序遍历所建二叉树。20 .求二叉树结点总
2、数,观察输出结果。21 .求二叉树叶子总数,观察输出结果。22 .交换各结点的左右子树,用广义表表示法显示新的二叉树。23 . ()二叉树采用链接存储结构,其根结点指针为T,设计一个算法对这棵二叉树的每个结 点赋值:(注意要修改DataType类型)a)叶结点的值为3b)只有左孩子或右孩子的结点那么其值分别等于左孩子或右孩子的值c)左、右孩子均有的结点,那么其值等于左、右孩子结点的值之和d)用广义表表示法显示所建二叉树【参考框架】#include #include 二叉树的链式存储表示typedef char DataType;应由用户定义DataType的实际类型typedef struct
3、 node DataType data;struct node *lchild, *rchild; 左右孩子指针 BinTNode;结点类型typedef BinTNode *BinTree;void main()void ListBinTree(BinTree T); /用广义表表示二叉树void DisplayBinTree(BinTree T); 用凹入表表示二叉树void CreateBinTree(BinTree *T); 构造二叉链表 void Preorder(BinTree T);前序遍历二叉树void Inorder(BinTree T);/中序遍历二叉树void Posto
4、rder(BinTree T);后序遍历二叉树int nodes(BinTree T);计算总结点数int leafs(BinTree T);/计算总叶子数BinTree sw叩(BinTree T);交换左右子树B inTree T;printf(请输入先序序列(虚结点用空格表示):n); CreateBinTree(&T);ListBinTree(T);printf(nnn);Display B inTree(T);printf(前序遍历:nn);Preorder(T);printf(nnn);printf(中序遍历:nH);Inorder(T);printf(nnn);printf(后序
5、遍历:nn);Postorder(T);printf(Hnn);printf(二叉树的总结点数为 dn”,nodes(T);printf(二叉树的总叶子结点数为dnleafs(T); T=swap(T);ListBinTree(T); printf(nnn);构造二叉链表void CreateBinTree(BinTree *T)(/在此插入必要的语句/用广义表表示二叉树void ListBinTree(BinTree T)在此插入必要的语句用凹入表表示二叉树void DisplayBinTree(BinTree T) (/在此插入必要的语句)前序遍历二叉树void Preorder(B in
6、Tree T)(/在此插入必要的语句)中序遍历二叉树void Inorder(B inTree T)(在此插入必要的语句后序遍历二叉树void Postorder(B inTree T)(在此插入必要的语句计算总结点数int nodes(B inTree T)(/在此插入必要的语句)/计算总叶子数int leafs(BinTree T)/在此插入必要的语句交换左右子树B inTree swap(B inTree T)(/在此插入必要的语句【实验报告】数据结构与算法实验报告三学院:班级:学号:姓名:日期:程序名:L6LCPP一、上机实验的问题和要求:要求采用二叉链表作为存储结构,完成二叉树的建立
7、,前序、中序和后序遍历的操作,求所 有叶子及结点总数的操作等。具体实现要求:i. 基于先序遍历的构造算法:输入是二叉树的先序序列,但必须在其中加入虚结点以示空指针的位置。假设虚结点输入时用空格字符表示。ii. 用广义表表示所建二叉树。iii. 分别利用前序遍历、中序遍历、后序遍历所建二叉树。iv. 求二叉树结点总数,观察输出结果。v. 求二叉树叶子总数,观察输出结果。vi. 交换各结点的左右子树,用广义表表示法显示新的二叉树。vii. ()二叉树采用链接存储结构,其根结点指针为T,设计一个算法对这棵二叉树的每个结点赋值:(注意要修改DataType类型)a.叶结点的值为3b.只有左孩子或右孩子
8、的结点那么其值分别等于左孩子或右孩子的值c.左、右孩子均有的结点,那么其值等于左、右孩子结点的值之和d.用广义表表示法显示所建二叉树二、源程序及注释:三、运行输出结果:四、调试和运行程序过程中产生的问题及采取的措施:实验四Huffman树【实验目的】【实验平台】操作系统:开发环境:理解建立Huffman树的算法。Windows2000 或 Windows XPC 或 C+【实验内容及要求】阅读理解建立Huffman树的算法,对该算法进行运行及调试。具体实现要求:1 .调试并运行Huffman算法。2 .()求Huffman树的带权路径长度WPL。【参考框架】#include #include
9、#include typedef HTNode HuffmanTreem; /HuffmanTree 是向量类型/Huffman树的存储结构#define n 100#define m 2*n-l typedef struct float weight;int lchild,rchild,parent;HTNode;叶子数目树中结点总数结点类型权值,不妨设权值均大于零左右孩子及双亲指针typedef struct char ch;存储字符char bitsn+l;/存放编码位串CodeNode;typedef CodeNode HuffmanCoden;void InitHuffmanTree
10、(HuffmanTree T);初始化 Huffman 树void InputWeight(HuffmanTree T);输入权值void SelectMin(HuffmanTree T,int i,int *pl,int *p2);void main() (void CreateHuffmanTree(HuffmanTree T); 构造 Huffman 树 void CharSetHuffmanEncoding(HuffmanTree T,HuffmanCode H); HuffmanTree T;HuffmanCode H;CreateHuffmanTree(T);CharSetHuff
11、manEncoding(T,H);void CreateHuffmanTree(HuffmanTree T)/构造Huffman树,为其根结点int i,pl,p2;InitHuffmanTree(T);将 T 初始化InputWeight(T);输入叶子权值至T0.n-l的weight域for(i=n;im;i+) 共进行n-1次合并,新结点依次存于Ti中 SelectMin(T,i-l ,&p 1 ,&p2);在中选择两个权最小的根结点,其序号分别为pl和p2Tpl .parent=Tp2 .parent=i;Ti.lchild=pl;/最小权的根结点是新结点的左孩子Ti.rchild=p
12、2;/次小权的根结点是新结点的右孩子Ti.weight=Tp I.weight+Tp2. weight;)void InitHuffmanTree(HuffmanTree T)初始化Huffman树int i;for (i=0;im;i+)(Ti.weight=O;Ti.lchild=Ti.rchild=Ti .parent=NULL;)void InputWeight(HuffmanTree T)输入权值int i;for (i=0;in;i+)printf(”请输入第d个权值:”,i+1);scanf(n%f;&Ti.weight);)void SelectMin(HuffmanTree
13、T,int i,int *pl,int *p2) 在T中选择两个权最小的根结点intj;float minl,min2;mini =min2=-l;for(j=0;j=i;j+)if(Tj .parent=NULL)(if(Tj.weightmin l|min 1 =-l)(if(minl!-1)min2=minl;*p2=*pl;)min l=Tj. weight;*pl二j;)elseif(Tj. weightmin2| |min2=-1) (min2=Tj. weight;*p2寸)void CharSetHuffmanEncoding(HuffmanTree T,HuffmanCode
14、 H)/根据Huffman树T求Huffman编码表Hint c,p,i;/c和p分别指示T中孩子和双亲的位置char cdn+l;/临时存放编码int start;指示编码在cd中的起始位置cdn=,0,;编码结束符printf(”请输入字符:)for(i=0;in;i+)依次求叶子Ti的编码(Hi.ch=getchar();读入叶子Ti对应的字符start=n;编码起始位置的初值c=i;/从叶子Ti开始上溯while(p=Tc.parent)!=NULL)直至上溯到 Tc是树根为止 假设Tc是Tp的左孩子,那么生成代码0;否那么生成代码1cd-start=(Tp.lchild=c)?!O,
15、:,r; c=p;继续上溯)strcpy(Hi.bits,&cdstart);/复制编码位串) for(i=0;in;i+)printf(nM%d 个字符c 的编码为sn”,i+l,Hi.ch,Hi.bits);【实验报告】数据结构与算法实验报告学院:学号:日期:班级:姓名:程序名:L62CPP一、上机实验的问题和要求:阅读理解建立Huffman树的算法,对该算法进行运行及调试。具体实现要求:1 .调试并运行Huffman算法。2 .()求Huffman树的带权路径长度WPL。二、源程序及注释:三、运行输出结果:四、调试和运行程序过程中产生的问题及采取的措施:实验五查找(二叉排序树)【实验目的
16、】【实验平台】操作系统:开发环境:熟练掌握二叉排序树上的查找算法。Windows2000 或 Windows XPC 或 C+【实验内容及要求】实现二叉排序树上的查找算法。具体实现要求:24 .用二叉链表做存储结构,输入键值序列,建立一棵二叉排序树。25 .用广义表表示所建二叉树。26 .按中序遍历这棵二叉排序树。27 .在二叉排序树上插入结点。28 .删除二叉排序树上的结点。29 .在二叉排序树上实现查找算法。【参考框架】#include #include typedef int InfoType;typedef int Key Type;假定关犍字类型为整数typedef struct n
17、ode结点类型(Key Type key;关键字项InfoType otherinfo;其它数据域,InfoType视应用情况而定 下面不处理它struct node *lchild,*rchild;左右孩子指针 jBSTNode;typedef BSTNode *BSTree;/BSTree 是二叉排序树的类型void main() (void InsertB ST (B STree *Tptr,Key Type key); 将关键字 key 插入二叉排序树中BSTree CreateBST(void);建立二叉排序树void ListBinTree(BSTree T);用广义表表示二叉树v
18、oid DclBSTNodc(BSTrcc *Tptr,KcyTypc key); 在 二叉 排序树 中删除 关键字 keyBSTNode *SearchBST(BSTree T,KeyType key); 在二叉 排序树中查找 关键字 keyBSTree T;BSTNode *p;int key;printf(”请输入关键字(输入。为结束标志):nn);T=CreateBST();ListBinTree(T);printf(nnn);printf(”请输入欲插入关键字:”); scanf(H%dn,&key);InsertB ST(&T,key);ListBinTree(T);printf(
19、nnn);printf(”请输入欲删除关键字:”); scanf(H%dn,&key);DelBSTNode(&T,key);ListBinTree(T);printf(nnn);printf(”请输入欲查找关键字:”);scanf(H%dn,&key);p=SearchBST(T,key);if(p=NULL)printf(没有找到%d! nkey);elseprintf(找到(1! nn,key);ListBinTree(p);printf(Hnn);将关键字key插入二叉排序树中 void InsertBST(BSTree *Tptr,Key Type key) (在此插入必要的语句/建
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 实验 指导书
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。