数据结构是什么?一开始听到这个名词的时候,觉得一听就深奥难懂。细细一想,“数据结构”,顾名思义就是数据的结构,是计算机存储数据时用的结构。后来学习这门课,才明白数据结构和效率是密切相关的,编写程序的人要让计算机更加高效的工作,这就涉及到算法。所以我觉得数据结构与算法是密切相关的。
不管是什么语言,似乎学习过程中都有一个必不可少的步骤,就是排序。什么冒泡排序,选择排序,快速排序,堆排序。刚开始总有不解,排序干嘛呢?其实这是检验数据结构和算法最好的例子,如果是一百万个数字,如果用冒泡估计得排上好久了。
不同的排序方法,是用数组,链表,堆栈还是图?这又有不同的效率。所以,我觉得数据结构入门容易,用的得心应手可不是件简单的事情。
前几天写了哈夫曼树。写哈夫曼树,第一步就是读取文件,按字节读取文件,存入到数组队列中;第二步是统计频度,将频度存入另一个数组队列;第三步是对频度进行排序,第四步就是建树了。以下是源代码
/*
* 读文件的方法,将读取到的字节存入数组队列list中
*/
public void readfile() throws IOException{
FileInputStream file = new FileInputStream("file/newtext.txt");
while(file.available()>0){
int i=file.read();
list.add(i);
}
}
/*
* 统计频度的方法,将频度存入另外一个数组队列l中
*/
public void count(){
int count[] = new int[list.size()];
//给数组赋初值为1
for(int i = 0;i<count.length;i++){
count[i]=1;
}
for(int i=0;i<list.size();i++){
for(int j=i+1;j<list.size();j++){
if(list.get(i).equals(list.get(j))){
count[i]++;
list.alter(j, -1);
}
}
for(int m=i+1;m<list.size();m++){
if(list.get(m).equals(-1)){
list.remove(m);
}
}
HaffmanNode node = new HaffmanNode(list.get(i),count[i]);
l.add(node);//将次数存入数组队列中
}
}
/*
* 排序方法,选择排序
*/
public void sort(){
for (int j = 0; j< l.size() - 1; j++) {
for (int t = j + 1; t < l.size(); t++) {
if (l.get(t).getweight() <l.get(j).getweight()) {
l.swap(j, t);
}
}
}
}
/*
* 建树的方法
*/
public void createTree(){
while(l.size()>1){
int temp = l.get(0).getweight()+l.get(1).getweight();
HaffmanNode node = new HaffmanNode(0,temp);
node.setleft(l.get(0));
node.setright(l.get(1));
l.add(node);
l.remove(0);
l.remove(0);
sort();
System.out.println("*"+node.getleft().getweight());
System.out.println("#"+node.getright().getweight());
System.out.println(node.getweight());
}
}
哈夫曼树就建好了,我看了一下别人的,有的用图,有的用链表。我写的确实有些麻烦,办法也不够好,但是都是自己想出来的,还会学习其他办法,使用更高效的方法解决问题。
分享到:
相关推荐
1. 构建哈夫曼树:根据字符和权值,通过合并最小的两个节点来构建树。 2. 输出哈夫曼树:以图形化方式(如ASCII艺术)在终端上展示哈夫曼树。 3. 哈夫曼编码:遍历哈夫曼树,根据路径生成字符的编码。 4. 哈夫曼解码...
在这个数据结构课程设计中,我们将深入探讨哈夫曼树的原理、构建方法以及C语言实现的细节。 首先,哈夫曼树的基本概念是:每个叶子节点代表一个需要编码的字符,其权重代表该字符在文本中的出现频率。非叶子节点则...
printf("请输入树叶子结点的总数:"); scanf("%d",&n); t=2*n-1; printf("请输入各叶子结点的数值:"); for(j=1;j;j++) {scanf("%d",&r[j].data); r[j].tag=0; r[j].lch=0; r[j].rch=0; } i=0; while(i) {...
哈夫曼树和编码的实现是数据结构课程中的一个重要实践环节,它帮助学生理解如何将理论知识应用于实际问题,同时也锻炼了他们的编程和问题解决能力。通过这个实验,学生能够更深入地理解如何使用数据结构优化信息处理...
在给定的文件"数据结构哈夫曼树"中,可能包含了关于如何构建和使用哈夫曼树的详细步骤、实例演示以及相关的编程实现。通过学习这些内容,你可以深入理解哈夫曼树的工作原理,并能够实际操作进行数据的压缩和解压缩。...
数据结构课程设计中,哈夫曼树是一种重要的数据结构,主要应用于编码和译码操作。哈夫曼树,又称最优二叉树,是基于贪心算法构建的一种特殊二叉树,其特点是所有叶子节点都在最外层,且任意非叶子节点的度数均为2。...
1. **数据结构**:哈夫曼树通常用链表表示,每个节点包含字符、频率、左子节点和右子节点。可以使用最小堆(优先队列)来动态构建哈夫曼树,每次合并两个频率最小的节点,直到所有节点合并成一棵树。 **实现步骤** ...
在这个课设中,我们关注的是哈夫曼树(Huffman Tree),一种在数据压缩领域广泛应用的数据结构。哈夫曼树,也称为最优二叉树,是通过哈夫曼编码实现数据压缩的关键工具。下面将详细阐述哈夫曼树的概念、构建过程、...
在这个数据结构课程设计中,我们将深入理解哈夫曼树的构建原理,并通过编程实现文件的压缩。 首先,我们要理解哈夫曼树的构造过程。哈夫曼树的构建基于贪心策略,通过不断地合并权值最小的两个节点来构建。这个过程...
在计算机科学领域,数据结构是构建高效算法的基础,而哈夫曼树(Huffman Tree)作为一种特殊的二叉树,因其在数据编码与压缩中的独特优势,被广泛应用于信息传输和存储。本篇我们将围绕北京邮电大学(北邮)的一份...
C语言实现的哈夫曼树
在这个报告中,我们将专注于一种特殊的数据结构——哈夫曼树,也被称为最优二叉树,它在数据编码、压缩等领域有着广泛的应用。 哈夫曼树是一种带权路径长度最短的二叉树,其中每个叶子节点代表一个需要编码的字符,...
2. 实现哈夫曼树数据结构,使用哈夫曼树完成如下文档的编码与译码,假设该文档由5种符号字符(A、B、C、D、E)构成 ABACDEABBCEABAACCCDEACCBAABCCCA 3. 选做:实现二叉树的中序遍历线索化数据结构 4. 选做:使用...
《四川大学计算机学院数据结构与算法分析实验报告——改进哈夫曼树类模板》 本实验报告详尽探讨了数据结构中的一个重要主题——哈夫曼树及其类模板的改进。哈夫曼树,又称为最优二叉树,是用于数据编码的一种特殊...
哈夫曼树是一种在计算机科学中广泛使用的数据结构,尤其在数据压缩领域有着重要的应用。本实验报告主要探讨了如何运用哈夫曼树对文本文件进行编码和解压缩,以实现无损数据压缩。 首先,我们需要理解哈夫曼树的基本...
哈夫曼树及哈夫曼编码译码的实现 哈夫曼树是一种特殊的二叉树,它的每个节点的权重是其所有子节点...通过本实验,我们掌握了哈夫曼树的建立和哈夫曼编码的算法,并了解了哈夫曼树在数据压缩、编码、译码等领域的应用。
以上就是关于“数据结构中哈夫曼树操作”的主要知识点,通过C语言实现哈夫曼树的构建和操作,不仅可以加深对数据结构的理解,还能为实际项目中的数据压缩提供技术支持。在实际编程过程中,需要注意内存管理、错误...
一、问题描述 运用哈夫曼算法构造哈夫曼树,并得到哈夫曼编码。 输入格式:10,5,21,18,8,13 ...1、构造哈夫曼树和哈夫曼编码的存储结构。 2、实现哈夫曼算法,实现哈夫曼树的存储并求出哈夫曼编码。
哈夫曼树的核心思想是通过频率排序构建最小带权路径长度的二叉树,以此为基础实现数据的高效压缩。 压缩算法是计算机科学中的一种技术,用于减少数据存储空间,提高传输效率。常见的压缩算法有哈夫曼编码、LZ77、LZ...