数据结构哈弗曼Word格式文档下载.docx
- 文档编号:16061901
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:18
- 大小:96.92KB
数据结构哈弗曼Word格式文档下载.docx
《数据结构哈弗曼Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构哈弗曼Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
structnode*rchild;
}BiTNode,*BiTree;
voidCreateBinTree(BiTree&
T)
inti;
scanf("
%d"
&
i);
if(i==0)
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->
data=i;
CreateBinTree(T->
lchild);
rchild);
}
}
voidInorder(BiTreeT)
if(T)
Inorder(T->
printf("
%3d"
T->
data);
voidPreorder(BiTreeT)
if(T)
Preorder(T->
voidPostorder(BiTreeT)
Postorder(T->
voidmain()
BiTreeT;
charch1,ch2;
printf("
\n欢迎进入二叉树基本操作测试程序,请选择:
\n"
);
ch1='
y'
;
while(ch1=='
||ch1=='
Y'
)
\nA-------------------------二叉树的建立"
\nB-------------------------先序遍历"
\nC-------------------------中序遍历"
\nD-------------------------后序遍历"
\nE-------------------------退出\n"
scanf("
\n%c"
ch2);
switch(ch2)
{
case'
a'
:
A'
printf("
请输入按先序建立二叉树的节点序列:
CreateBinTree(T);
break;
b'
B'
该二叉树的先序遍历序列为:
Preorder(T);
c'
C'
该二叉树的中序遍历序列为:
Inorder(T);
d'
D'
该二叉树的后序遍历序列为:
Postorder(T);
e'
E'
ch1='
n'
default:
输入无效,请重新选择需要的操作:
}
运行结果
2.
stdlib.h>
#defineMAXSIZE100
intdata;
typedefstruct
BiTreedata[MAXSIZE];
inttop;
}SeqStack;
//初始化顺序栈
voidInitStack(SeqStack&
s)
s.top=0;
//判断栈是否为空
intStackEmpty(SeqStacks)
if(s.top==0)
return1;
return0;
//判断栈是否满
intStackFull(SeqStacks)
if(s.top==MAXSIZE-1)
//入栈
voidPush(SeqStack&
s,BiTreex)
if(StackFull(s))
栈满!
return;
s.data[s.top]=x;
s.top++;
//出栈
BiTreePop(SeqStack&
BiTreey;
if(StackEmpty(s))
栈空!
{
s.top=s.top-1;
y=s.data[s.top];
returny;
//取回栈顶元素
BiTreeStackTop(SeqStacks)
returns.data[s.top-1];
//创建二叉树
//
voidPreorderN(BiTreeT)
SeqStackS;
BiTreep;
InitStack(S);
Push(S,T);
while(!
StackEmpty(S))
while(p=StackTop(S))
p->
Push(S,p->
p=Pop(S);
if(!
p=Pop(S);
每输完一个数都要敲回车!
CreateBinTree(T);
输出序列为:
"
PreorderN(T);
运行结果:
3哈弗曼编码
windows.h>
#definemax1024
chardata;
unsignedintweight;
//权值
unsignedintparent,lchild,rchild;
//父节点、左孩子、右孩子的位置
}HTNode,*HuffmanTree;
typedefchar**HuffmanCode;
//指针的指针,用于动态申请数组,存放编好的编码
voidHuffmanCoding(HuffmanTree&
HT,HuffmanCode&
HC,int*w,intn,char*z)
//w存放n个字符的权值(均>
0),构造哈夫曼树HT,
//并求出n个字符的哈夫曼编码HC
inti,j,m,s1,s2,start;
//i、j、m为临时变量,s1、s2存放权值最小的权值在数组中的位置
intsun1,sun2;
//sun1、sun2存放最小的两个权值
char*cd;
//用于动态申请数组,存放编好的一条编码
unsignedintc,f;
//c为临时变量,f存放父节点的位置
if(n<
=1)return;
m=2*n-1;
//m的大小是所有结点的数量
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
//0号单元未用
for(i=1;
i<
=n;
i++){//对数组进行初始化
HT[i].weight=w[i-1];
HT[i].data=z[i-1];
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
for(i=n+1;
=m;
i++){//对剩余数组进行初始化
HT[i].data='
\0'
HT[i].weight=0;
/*printf("
\n哈夫曼树的构造过程如下所示:
\n**************************************\n"
HT初态:
\n结点weightparentlchildrchild"
//输出数组的初始状态
i++)
\n%4d%8d%8d%8d%8d"
i,HT[i].weight,
HT[i].parent,HT[i].lchild,HT[i].rchild);
按任意键,继续..."
getchar();
//获得的是回车符,所以要有两个getchar,或者用清除缓存区语句
*/
i++)
{//建哈夫曼树
//在HT[1..i-1]中选择parent为0且weight最小的两个结点,
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 哈弗曼