论论数据结构

数据结构是指逻辑意义上的 数据组织方式 及其相应的处理方式。

为什么是逻辑意义上的数据组织方式?因为数据结构中落到数据存储上的表现形式不一定是一一对应的,甚至可能看不到原来数据的样子,所以叫做逻辑意义上的组织方式。

 

数据组织方式

  • 表:至多有0到一个直接前距或者0到一个直接后距

  • 树:直接前距是0个,直接后距可能是0到n个

  • 图:直接前距和直接后距可能都是多个

  • 散列:是根据hash算法来确定存储位置的数据结构方式。

数据处理方式

以某种特定的算法实现数据的增删改查以及遍历。

为什么遍历也算数据处理方式的一种?因为遍历数据时由第一个数据遍历到最后一个,不同的实现算法,遍历的效能是完全不一样的。所以它也是数据处理方式的一种。

 

 

算法复杂度,评价数据结构的好坏?

谈到数据结构,肯定就会想到算法复杂度。以前遇到过两个题:

  • 请问O(log2n)与O(log3n)哪个的算法复杂度更复杂?这里算法复杂度是一样的。

  • AVL树和红黑树谁的数据结构好些?数据结构好与坏,没有绝对的好与坏,取决于它的场景(比如读多写少还是写多读少)和数据量。

 

 

什么是树:

  1. 一个节点,即只有根节点,也可以是一棵树。

  2. 其中任何一个节点与下面所有节点构成的树称为子树。

  3. 根节点没有父节点,而叶子节点没有子节点。

  4. 除根节点外,任何节点有且仅有一个父节点。

  5. 任何节点可以有0到n个子节点。

 

什么是二叉查找树?

二叉查找树特性:

  1. 左子树上所有节点值均小于或等于节点的值。

  2. 右子树上所有节点值均大于或等于节点的值。

  3. 任何递归左右子树也都是二叉查找树。

 

二叉树如何查找数据10?

因为10 > 9,所以查看右孩子13;

由于10 < 13,因此查看左孩子11;

由于10 < 11,因此查看左孩子10,发现10就是查找的节点。

这种方式就是二分查找的思想,查找所需的最大次数就是二叉树查找树的高度。

 

平衡二叉树?

平衡二叉树的性质:

  1. 树的左右高度差不能超过1

  2. 任何往下递归的左子树和右子树必须符合第1条性质

  3. 没有任何节点的空树或者只有根节点的树也是平衡二叉树

 

红黑树与AVL树

AVL树算法是以苏联数学家Adelson-Velsky和Landis名字命名的平衡二叉树算法。

红黑树是于1972年发明的,当时称为对称二叉B树,1978年得到优化,正式命名为红黑树。它的主要特征是在每个节点上增加一个属性来表示节点的颜色,可以是红色,也可以是黑色。

红黑树以各方面都不差的性能,在JDK集合中广泛使用。

 

红黑树的特性:

  1. 节点只能是红色或黑色。

  2. 根节点必须是黑色。

  3. 所以NIL(Nothing In Leaf)节点都是黑色。

  4. 一条路径上不能出现相邻的两个红色节点。

  5. 在任何递归子树内,根节点到叶子节点的所有路径上包含相同数目的黑色。

 

插入或删除节点时,导致红黑树性质发生改变,有两种调整方法:[变色]和[旋转]。而旋转又分成两种形式:[左旋转]和[右旋转]。

 

 

 

 

比较LinkedList和ArrayList:

在subList场景中,对父集合元素的增加或删除,均会导致子列表的遍历、增加和删除产生ConcurrentModificationException异常。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值