数据结构、栈和队列、树和二叉树

30 篇文章 0 订阅
17 篇文章 0 订阅

1.递归recursion

核心:自己调自己

注意:有一个出口,不停地向出口靠近


2.二分查找

首先,查找表必须使用顺序存储结构;

其次,查找表必须按关键字大小有序排列。

思路:起始下标 终点下标 中间下标


3.数据结构

概念:

数据结构=逻辑结构+存储结构+(在存储结构上的)运算/操作

线性结构:"一对一"

树状结构:“一对多”

网状结构:“多对多”

储存结构:

顺序结构:把逻辑上相邻的节点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。

链式存储结构:数据元素的存储对应的是不连续的存储空间,每个存储节点对应一个需要存储的数据元素。每个结点是由数据域和指针域组成。元素之间的逻辑关系通过存储节点之间的链接关系反映。逻辑上相邻节点物理上不必相邻。

索引存储结构:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。

比如图书、字典的目录

散列存储结构:根据结点的关键字直接计算出该结点的存储地址,比如Java中的HashSet、HashMap底层就是散列存储结构。这是一种神奇的结构,添加、查询速度快。


4.线性表

定义:线性表是n个类型相同数据元素的有限序列,通常记作(a0 , a 1 , …a i-1 , a i , a i+1 …,a n-1 )。

1.相同数据类型 

2.序列(顺序性)

3.有限

顺序表----顺序存储结构

链表----链式存储结构

双向链表

循环链表


5.栈和队列

栈的定义

栈(stack )又称堆栈,它是运算受限的线性表

队列定义

队列(queue)简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。

双端队列deque

所谓双端队列是指两端都可以进行进队和出队操作的队列,如下图所示,将队列的两端分别称为前端和后端,两端都可以入队和出队


6.树和二叉树

树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。

树(tree )是 n(n ≥ 0)个结点的有限集。它

1) 或是一棵空树(n = 0),空树中不包含任何结点。

2) 或是一棵非空树(n > 0),此时有且仅有一个特定称为根(root )的结点;

二叉树

每个结点的度均不超过 2 的有序树,称为 二叉树(binary tree)

满二叉树

高度为k并且有 2k+1 -1 个结点的二叉树。

满二叉树中,每层结点都达到最大数,即每层结点都是满的,因此称为满二叉树。

完全二叉树

若在一棵满二叉树中,在最下层从最右侧起去掉相邻的若干叶子结点,得到的二叉树即为完全二叉树。

满二叉树必为完全二叉树,而完全二叉树不一定是满二叉树

二叉树的存储结构

二叉树存储结构有两种:顺序存储结构和链式存储结构。更多使用链式存储结构

链式存储结构

设计不同的结点结构可构成不同的链式存储结构。

二叉查找/搜索/排序树  BST  (binary search/sort tree)

或者是一棵空树;

(1)若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;

(2)若它的右子树上所有结点的值均大于它的根节点的值;

(3)它的左、右子树也分别为二叉排序树。

 注意:对二叉查找树进行中序遍历,得到有序集合。

平衡二叉树(Self-balancing binary search tree)

 自平衡二叉查找树  又被称为AVL树(有别于AVL算法),它是一 棵空树

红黑树

R-B Tree,全称是Red-Black Tree,又称为"红黑树",它一种平衡二叉树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。

红黑树的特性:

(1)每个节点或者是黑色,或者是红色。

(2)根节点是黑色。

(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]

(4)如果一个节点是红色的,则它的子节点必须是黑色的。

(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

注意

(01) 特性(3)中的叶子节点,是只为空(NIL或null)的节点。

(02) 特性(5),确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树


7.图

图的基本概念:多对多关系,图(graph)是一种网状数据结构,图是由非空顶点集合和一个描述顶点间关系的集合组成。

图的存储结构

可以采用顺序存储结构和链式存储结构,更多采用链式存储结构

邻接表:链表  链式存储结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值