java数据结构 【vaynexiao】

分为线性结构和非线性结构

线性结构包括常见的数组、链表、栈、队列、哈希表(散列表)等,
非线性结构包括树、图等。
原文链接:https://mp.weixin.qq.com/s/ZVwIUN-xf9FuxOFXW8H3Nw

1,数组

适合读操作多,写操作少的场景,因为根据下标来查找元素,而插入和删除元素都得将后面的大量元素被迫移动,效率低下。
创见数组时长度固定,添加元素时要扩容。
data|next
在这里插入图片描述

2,链表

单向链表
双向链表
长度不是固定,可随意插入新元素。
prev|data|next
在这里插入图片描述

链表和数组对比

在这里插入图片描述

在这里插入图片描述

3,跳表

在这里插入图片描述

4,栈 stack

装乒乓球,栈底bottm,栈头top,先入后出FILO,入栈push,出栈pop
栈是一种比较简单的数据结构,常用一句话描述其特性,后进先出。栈本身是一个线性表,但是在这个表中只有一个口子允许数据的进出。这种模式可以参考腔肠动物…即进食和排泄都用一个口…

栈的常用操作包括入栈push和出栈pop,对应于数据的压入和压出。还有访问栈顶数据、判断栈是否为空和判断栈的大小等。由于栈后进先出的特性,常可以作为数据操作的临时容器,对数据的顺序进行调控,与其它数据结构相结合可获得许多灵活的处理。
在这里插入图片描述

5,队列queue

先入先出FIFO,队头front,队尾rear,入列enqueue,出列dequeue
双端序列,优先序列

队列是栈的兄弟结构,与栈的后进先出相对应,队列是一种先进先出的数据结构。顾名思义,队列的数据存储是如同排队一般,先存入的数据先被压出。常与栈一同配合,可发挥最大的实力。
在这里插入图片描述

6,树

树作为一种树状的数据结构,其数据节点之间的关系也如大树一样,将有限个节点根据不同层次关系进行排列,从而形成数据与数据之间的父子关系。常见的数的表示形式更接近“倒挂的树”,因为它将根朝上,叶朝下。

树的数据存储在结点中,每个结点有零个或者多个子结点。没有父结点的结点在最顶端,成为根节点;没有非根结点有且只有一个父节点;每个非根节点又可以分为多个不相交的子树。

这意味着树是具备层次关系的,父子关系清晰,家庭血缘关系明朗;这也是树与图之间最主要的区别。
在这里插入图片描述
别看树好像很高级,其实可看作是链表的高配版。树的实现就是对链表的指针域进行了扩充,增加了多个地址指向子结点。同时将“链表”竖起来,从而凸显了结点之间的层次关系,更便于分析和理解。

树可以衍生出许多的结构,若将指针域设置为双指针,那么即可形成最常见的二叉树,即每个结点最多有两个子树的树结构。二叉树根据结点的排列和数量还可进一度划分为完全二叉树、满二叉树、平衡二叉树、红黑树等。
在这里插入图片描述
完全二叉树:除了最后一层结点,其它层的结点数都达到了最大值;同时最后一层的结点都是按照从左到右依次排布。
满二叉树:除了最后一层,其它层的结点都有两个子结点。

平衡二叉树

平衡二叉树又被称为AVL树,它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

  • 二叉排序树:是一棵空树,或者:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。

  • 树的高度:结点层次的最大值

  • 平衡因子:左子树高度 - 右子树高度
    二叉排序树意味着二叉树中的数据是排好序的,顺序为左结点<根节点<右结点,这表明二叉排序树的中序遍历结果是有序的。(还不懂二叉树四种遍历方式[前序遍历、中序遍历、后序遍历、层序遍历]的同学赶紧补习!)
    在这里插入图片描述
    未完。。参照文首链接原文查看。。。。

猜你喜欢

转载自blog.csdn.net/vayne_xiao/article/details/107367722