ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:66.98KB ,
资源ID:20570259      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20570259.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计赫夫曼树的建立Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计赫夫曼树的建立Word文档格式.docx

1、 friend class MyHuffmanTree;public: char charater;/元素值(字符) int weight;/权值(频率) string code;/Huffman编码 HTNode *left;/左孩子 HTNode *right;/右孩子 HTNode (char c=0, int w=0) charater=c; weight=w; left=right=NULL; bool operator (HTNode & target) if( weight target.weight ) return true; else return false; /oper

2、ator (HTNode * target) target-weight ) friend ostream & operator (ostream &cout, HTNode * target) coutcharatertweight:weightcoderight & NULL=target-left) void HuffmanCode(HTNode *root) /以前序周游的思想编码 root-code=;/root的Huffman编码 stack aStack;/存储未访问元素的栈 HTNode * temp =root; aStack.push(NULL);/栈底监视哨 while(

3、temp) if(NULL != temp-right ) temp-right-code=temp-code + 1 aStack.push(temp-right); if( NULL !left )left-0 temp=temp-left; else/左子树访问完毕,转向访问右子树 temp=aStack.top(); aStack.pop(); /while /Huffman编码函数 MyHuffmanTree(HTNode * r) root=r; HuffmanCode(root); /构造函数 MyHuffmanTree()DeleteTree(root); /析构函数 void

4、 DeleteTree(HTNode *root) if(NULL!=root) DeleteTree(root-left); delete root; /销毁树函数 void InOrder(HTNode * root) InOrder(root- visit(root); /中序周游 HTNode * Root() return root;/返回跟结点函数main文件:#include HuffmanTree.hMinHeap.hfstreamint main () int f128=0;/频率表 char c;/读入字符 /打开文件 ifstream fin(input.txt); if

5、(!fin) coutc; fc+; MinHeap heap(128); HTNode * p;/建堆用指针 HTNode *first , * second , *pa; for(int i=0;iweight+second-weight); pa-left=first;right=second; heap.insert(pa); pa=heap.min(); MyHuffmanTree mht(pa); mht.InOrder(mht.Root();最小堆MinHeap.h文件:template class MinHeap T * heapArray ; /存放堆数据的数组 int Cu

6、rrentSize ; /当前堆中的元素数目 int MaxSize ; /最大元素数目 void swap( int pos_x, int pos_y ) /交换位置xy的元素的函数 if( pos_x0 | pos_y0 ) return ; T temp ; temp=heapArraypos_x; heapArraypos_x=heapArraypos_y; heapArraypos_y=temp; MinHeap( const int size ) /构造函数,size为堆的最大元素数目 if( size= CurrentSize/2) & ( pos CurrentSize );

7、int leftchild( int pos ) /返回左孩子位置的函数 return ( 2 * pos + 1 ); int rightchild( int pos )/返回右孩子位置的函数 return ( 2 * pos + 2 ); int Parent( int pos ) /返回父结点位置的函数 return ( (pos-1) / 2 ); int Pos( T value ) /找出值为value的元素在堆中位置的函数 iMaxSize; i+) if( heapArrayi = value ) return i ; return -1 ;/pos bool insert(

8、const T & newNode )/向堆中插入新元素newNode /判断堆是否已满 if ( CurrentSize = MaxSize )/堆已满堆已满 return false; /堆未满 heapArrayCurrentSize= newNode ;/新元素newNode放到堆的末尾 SiftUp( CurrentSize ); /向上调整 CurrentSize + ; /堆的当前元素数加1 return true ; /insert bool remove( int pos)/删除给定下标的元素 /判断下标是否越界 if ( (pos = CurrentSize) ) retu

9、rn false ; /下标未越界 heapArraypos=heapArray-CurrentSize;/用最后的元素值代替被删除的元素 if( pos = 0 ) SiftDown(pos); if ( heapArrayParent(pos) heapArraypos ) SiftUp(pos); else SiftDown(pos); /remove T & min() /返回最小值元素 return heapArray0 ; void SiftUp( int pos ) /从pos开始向上调整 int temppos=pos; T temp = heapArraytemppos; w

10、hile( (temppos0) & (heapArrayParent(temppos) temp) ) heapArraytemppos=heapArrayParent(temppos); temppos=Parent(temppos); heapArraytemppos=temp ; /SiftUp void SiftDown ( int pos )/从pos开始向下调整 int i = pos ; /标识父结点 int j = leftchild(i);/用于记录关键值较小的子结点 T temp = heapArrayi;/记录父结点元素值 while( j CurrentSize) i

11、f( (j heapArrayj+1) )/若有右子结点且小于左子结点 j+; /j指向小的右子结点 if ( temp heapArrayj )/若父结点的值大于子结点的值则交换 heapArrayi=heapArrayj; i=j; j=leftchild(j); else break ; /父结点 1) SiftDown(0); return heapArrayCurrentSize; /else /RemoveMin int GetCurrentSize() return CurrentSize ;程序运行结果:输入:2 4 6 8 10输出: 权:1 3 5 7 9三、总结和分析经过

12、这次程序设计,我深刻的认识到,编写的程序不但要拿来使用,还要给别人查看,以便代码的维护。所以代码编写的风格尽量规范,清晰。代码较为冗余,可读性较差,可以多添加一些提示语句以及注释。在这次课程设计中我又进一步地了解了数据结构中算法的核心思想的重要性,懂得了一个程序地好坏关键在于算法是否优秀,一个好的优秀的算法可以使我们的程序更加完善,安全性更高以及有更高的效率。这次设计中我发现了自己的许多不足,更深入的了解了数据结构的思想,明白了理论知识和实际操作编写程序是密不可分的。同时,也明白了同学之间团结合作的重要性。指导老师评语:成绩评定: 指导老师签名:基地指导老师签名:年 月 日教研室意见教研室主任签章学院意见分管院长签章

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1