【无标题】哈夫曼树的构造、权值 C语言代码实现

本文介绍了如何使用C语言实现哈夫曼树的构造和权值计算。主要内容包括树和排序链表的数据结构,哈夫曼树的构造过程,以及权值的求解,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

哈夫曼树的构造、权值 C语言代码实现

一、数据结构
(1)树的数据结构

typedef struct
{
   
	int data;
	int left, rigth, parent;
	
}HTNode,*HTree;

(2)排序链表的数据结构

typedef struct SNode
{
   
	int data;//存放weight值
	int Tnum;//存放结点在树中的编码
	struct SNode *next;
}SNode,*SString;

二、构造哈夫曼树

//Select的参数k:T中有k个带权值的结点
int Select(HTree T, int k, int& the1, int &the2)
{
   
  //声明新链表,用于存储待处理结点的数据、排序
	SString blue;
	blue = (SNode*)malloc(sizeof(SNode));
	SNode* head = blue;
	

	for (int i = 1; i <= k; i++)
	{
   
		if (T[i].parent==0)
		{
   
			SString t =(SNode*)malloc(sizeof(SNode));
			
			t->data = T[i].data;
			t->Tnum = i;
			t->next = NULL;
			head->next = t;
			head = t;
		}
	}
	head = blue->next;
	printf("待排序表中各节点的weight值如下:\n");
	PrintList(blue);
  
  //根据链表中的weigth排序得到升序链表
	SString temp1 = blue->next;
	SString temp2 = temp1;
	for (int i = 1;temp1; i++)
	{
   
		temp2 = temp1;
		for (int j=i+1;temp2->next ; j++)
		{
   
			if ((temp2->data) >= (temp2->next->data))
			{
   
				int td, tt;
				td = temp2->data;
				temp2->data = temp2->next->data;
				temp2->next->data = td;

				tt = temp2->Tnum;
				temp2->Tnum = temp2->next->Tnum;
				temp2->next->Tnum = tt;			
			}
			temp2 = temp2->next;
		}
		temp1 = temp1->next;
	}
	printf("排序后表中各节点的weight值如下:\n");
	PrintList(blue);

	the1 = head
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值