数据结构

来源:互联网 发布:王千源 知乎 编辑:程序博客网 时间:2024/06/04 00:20

数据逻辑结构:

数据元素之间存在的关联关系被称为数据的逻辑结构。归纳起来,应用程序中的数据大致有如下四种基本的逻辑结构:
1.集合:数据元素之间只有“同属于一个集合”的关系
2.线性关系:数据元素之间存在一个对一个的关系
3.树形结构:数据元素之间存在一个对多个的关系
4.图状结构或网状结构:数据元素之间存在多个对多个的关系
说明

同一种的逻辑结构,在底层通常有两种物理存储结构:
1.顺序存储结构:[一维数组]
2.非顺序存储结构:[链式存储结构(链表)、散列结构]

栈(stack)

是一种特殊的线性表,只能在固定在一端(线性表的尾端)进行插入、删除操作,分为顺序栈结构和链式栈结构。
允许进行插入、删除操作的一端为栈顶top,另一端为栈底bottom。
进栈:将一个元素插入栈的过程。栈的长度+1。“压入栈”
出栈:删除一个元素的过程。栈的长度-1。“弹出栈”

特点:先进后出,或说后进先出。
常用操作:初始化。

队列(queue)

也是一种特殊的线性表,使用固定的一端(队尾rear)来插入数据,另一端(对头front)用于删除数据。
先进先出。就像购物一样,先进入队伍的顾客先获得服务,整个队伍按固定方向移动。
分为顺序队列结构和链式队列结构。
从JDK1.5开始,java集合框架提供了Queue接口。实现该接口的类可以当成队列使用。

一种数据结构,非线性的,这种结构内的元素存在一对多的关系。

二叉树:在普通树的基础上,让一棵树中每个节点最多只能包含两个子节点,且严格区分左子节点和右子节点(位置不能换)
遍历二叉树,考虑深度优先遍历(先序遍历、中序遍历和后序遍历)和广度优先遍历。

哈夫曼树,一种带权路径最短的二叉树,在信息检索中很常用。
哈夫曼编码,假设需要对一个字符串如“abcdabcaba”进行编码,将它转换为唯一的二进制码,同时要求转换出来的二进制码的长度最小。我们采用哈夫曼树来解决报文编码问题。

排序二叉树:一种特殊的二叉树,可以非常方便地对树中的所有节点进行排序和检索。满足一些条件的二叉树,才被称为排序二叉树。比如:若它的左子树不为空,左子树上的所有节点值均小于根节点值;若右子树不为空,右子树上的所有节点值均大于根节点值。

红黑树:一种更高效的检索二叉树,常用来实现关联数组。在实际编程中都有极为广泛的用途,例如JDK提供的集合类TreeMap就是一棵红黑树的实现。红黑树在只读操作上,跟普通排序二叉树上的只读操作相同,只是检索性能好。对于删除和插入操作可能导致树不再符合红黑树的特征。(需要进行颜色的调换)
红黑树的特性:首先满足排序二叉树的特性;每个节点要么红色,要么黑色;根节点是黑色的;所有叶子节点都是null且为黑色;红色节点的两个子节点是黑色的;从任一节点到其子树的每个叶子节点的路径都包含相同数量的黑色节点)

0 0
原创粉丝点击