⑴ java数据结构
首先明确,带权路径长度WPL最小的二叉树称作最优二叉树或哈夫曼树
那么比如说有4个节点,分别带权7,5,2,4如下ab两图
WPLa=7*2+5*2+2*2+4*2=36
WPLb=7*1+5*2+2*3+4*3=35
WPL=30*2+5*5*4+8*4*15*3+15*2+27*2=
不算了 口算不行... 看上式也知道你出现的概率越大,相当于基地越大,就给你乘个小的代价,必然是最优的。
⑵ java中有哪些数据结构
数据结构:
①数组 (Array)
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数
据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组
元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指
针数组、结构数组等各种类别。
②栈 (Stack)
栈是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后
的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
③队列 (Queue)
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行
插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
④链表 (Linked List)
一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:
一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
⑤树 (Tree)
树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)
(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。
⑥堆 (Heap)
在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指
二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
⑦图 (Graph)
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,
边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
⑧散列表 (Hash)
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称
这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
差不多我就知道这些了~
⑶ JAVA数据结构有哪几种
数组、栈 、队列、链表、树、堆 、图、散列表 。
1:数组是计算机编程语言上,对于“Array”的中文称呼,是用于储存多个相同类型数据的集合。
2:栈是限定仅在表尾进行插入和删除操作的线性表,栈者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。
3:一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
4:链表,一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
5:哈希表,是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
⑷ java问题,链表跟顺序表到底有什么不同顺序表我知道,但是为什么说链表读取数据时要从头开始,
接楼上:准确的来说,你的问题是一个数据结构上的问题.
首先你要区分一下物理上的存储结构 与 逻辑上的数据结构
物理上的存储结构
链式存储结构
顺序存储结构
逻辑上的数据结构
线性数据结构 :单链表 双向链表 循环列表(栈 队列 ...)
树:普通树 特殊树
查找表 : 静态查找表,动态查找表
图:有向图 ...
任何逻辑上的数据结构要在计算机上表示时,都必须根据自己的需求选择一种物理上的存储结构,然后根据逻辑数据结构的特性进行存储等等操作.
对于物理上的存储结构而言
顺序存储结构 : 只要知道基址地址,就可以通过数学计算出任一元素 的地址.
链式存储结构: 上下家不能越级联系,你知道爸爸是谁,但是不知道爷爷是谁,想找爷爷只能通过爸爸.(下一个结点的地址存储在上一个结点中)
这种特性是由于其物理实现决定的,目前暂时看没有办法改变.
回过头来看你的问题中两个关键的概念定义:
链表:以链式存储结构存储的线性表叫做链表
顺序表:以顺序存储结构存储的线性表叫做顺序表
所以:
顺序表可以随即存取任一元素.而链表在绝大部分情况下都需要遍历查找.
⑸ 关于JAVA和数据结构的问题
编程语言大同小异,基本的逻辑操作都是一样的。比如与或,if,while这些。
但是java是面向对象,c是面向程序。我先学的c,后学的java,怎么都转不过来。现在习惯用java了,又不会用c了。
其实吧,没必要学c。如果你java学的好,那么一般的函数调用,参数传递和逻辑语句都应该会了吧。这样接触一门新的语言就不是啥难事了。编程重要的是思想,
个人觉得初学编程的时候最难的就是逻辑操作。还有参数和函数的调用。这些都会了之后,不用专门学某种编程,都触类旁通了(汇编除外)。
我学了c之后自学java,现在用的最好的是java,然后可以重构别人的asp,c#,不会写但是都可以看懂了,看多了就会写了
⑹ JAVA数据结构哪些
主要是3种接口:List Set Map
List:ArrayList,LinkedList:顺序表ArrayList,链表LinkedList,堆栈和队列可以使用LinkedList模拟
Set:HashSet没有重复记录的集合
Map:HashMap就是哈希表
二叉树可以利用递归的思想来模拟自行设计,从JDK5开始还提供了一个新的队列接口
图!!!没遇到过这样的情况,恐怕还是要自己模拟