数据结构课程设计(1)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》课程设计报告

项目1题目——构建哈夫曼树和给出哈夫曼编码项目2题目——校园网络布线最小成本系统

班级:C1102

学号:**************

*名:**

时间:2012.12.26

摘要

“数据结构”是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,而且已成为其他理工专业的热门选修课。它的教学要求是:学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术。另一方面,本课程设计也是复杂程序设计的训练过程,要求学生编写的程序结构清湖和正确易读,符合软件工程的规范。

了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握哈夫曼树的构建和哈夫曼编码的问题分析、程序编码、测试等基本方法和技能。通过对学校校园网布线的问题,可以让我使用数据结构的一些知识来解决校园网布线的最小成本问题,更加熟练掌握无向网的邻接矩阵创建与最小生成树的普里姆算法实现,加深对邻接矩阵和普里姆的理解,培养我们对实际问题的理解和解决问题。

关键词:数据结构;哈夫曼;普里姆

目录

第一章构建哈夫曼树和给出哈夫曼编码 (1)

1.1设计目的与内容 (1)

1.1.1设计目的 (1)

1.1.2设计内容 (1)

1.2算法的基本思想 (1)

1.3 详细设计 (2)

1.3.1结构体定义 (2)

1.3.2构建哈夫曼树函数HuffmanTree() (3)

1.3.3哈夫曼编码生成函数HuffmanCode() (3)

1.4 测试数据 (5)

附录1 (6)

第二章校园网络布线最小成本系统 (10)

2.1设计目的与内容 (10)

2.1.1设计目的 (10)

2.1.2设计内容: (10)

2.2算法的基本思想 (11)

2.3详细设计 (12)

2.3.1结构体定义 (12)

2.3.2查询建筑物详细信息函数Refer() (13)

2.3.3邻接矩阵构造无向网函数CreateUDN() (14)

2.3.4主函数main() (16)

2.4测试数据 (18)

附录2 (20)

心得体会 (28)

参考文献 (28)

第一章构建哈夫曼树和给出哈夫曼编码

1.1设计目的与内容

1.1.1设计目的

了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握哈夫曼树的构建和哈夫曼编码的问题分析、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

1.1.2设计内容

在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为{8,4,5,3,1,1}。现要求为这些字母设计编码。要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制,可分别用000、001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码。显然编码的长度取决报文中不同字符的个数。若报文中可能出现26个不同字符,则固定编码长度为5。然而,传送报文时总是希望总长度尽可能短。在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C 的使用频率远远高于X、Y、Z,自然会想到设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码。

1.2算法的基本思想

(1)函数HuffmanTree()构建哈夫曼树;

①将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);

②在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;

③从森林中删除选取的两棵树,并将新树加入森林;

④重复②、③步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。

(2)函数HuffmanCode()赫夫曼编码;

①依次以叶子节点为出发点,向上回溯左分支生成代码0,右分支生成代码1;

②重复(1)步;

③结束。

1.3 详细设计

1.3.1结构体定义

typedef struct

{

int weight; //权值

int parent; //父结点下标

int lchild; //左孩子下标

int rchild; //右孩子下标

}HTNode;

typedef struct

{

int bit[MAXBIT];

int start;

}HCodeType;

1.3.2构建哈夫曼树函数HuffmanTree()

void HuffmanTree(HTNode HT[], int n)

{

int i,j,x1,x2;

int m1,m2;

for(i=1;i<=n-1;++i)//n-1个非叶子结点

{

m1=m2=MAXV ALUE; x1=x2=0; //m1,m2用来记录结点中最小的权值,x1,x2用来记录其左右子树结点

for(j=1;j

{

if(HT[j].parent==0)

{ if (HT[j].weight

x1=j;}

else if(HT[j].weight

}

}

HT[x1].parent=n+i;

HT[x2].parent=n+i;

HT[n+i].weight = HT[x1].weight + HT[x2].weight;

HT[n+i].lchild=x1;

HT[n+i].rchild=x2;

}//外层for循环结束

}

1.3.3哈夫曼编码生成函数HuffmanCode()

由于哈夫曼树中没有度为1的结点,则一颗有n个叶子结点的哈夫曼树共有2n-1个结点,可以存储在一个大小为2n-1的一维数组中。由于在构成哈夫曼

相关文档
最新文档