数据结构基础|青训营笔记

74 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记


一、概述

数据结构:就是计算机存储、组织数据的方式。

二、常见数据

1.数组

数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变。
数组的优点:
存取速度快

数组的缺点:

事先必须知道数组的长度 插入删除元素很慢 空间通常是有限制的 需要大块连续的内存块 插入删除元素的效率很低

2.链表

n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。

链表优点

空间没有限制
插入删除元素很快

链表缺点
存取速度很慢

3.哈希表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

4.栈

栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。
栈顶(Top):线性表允许进行插入删除的那一端。
栈底(Bottom):固定的,不允许进行插入和删除的另一端。

栈的示意图: 请添加图片描述

特点:先进后出

5.队列

队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并附设两个指针:队头指针 front指向队头元素,队尾指针 rear 指向队尾元素的下一个位置。

队列示意图: 请添加图片描述

特点:先进先出

三.树

1.树的相关概念

子树: 除了根节点外,每个子节点都可以分为多个不相交的子树。
孩子与双亲: 若一个结点有子树,那么该结点称为子树根的"双亲",子树的根是该结点的"孩子"。
节点的度: 一个节点拥有子树的数目。例如A的度为2,B的度为1,C的度为3.
叶子: 没有子树,也即是度为0的节点。
分支节点: 除了叶子节点之外的节点,也即是度不为0的节点。
内部节点: 除了根节点之外的分支节点。
层次: 根节点为第一层,其余节点的层次等于其双亲节点的层次加1.
树的高度: 也称为树的深度,树中节点的最大层次。
有序树: 树中节点各子树之间的次序是重要的,不可以随意交换位置。
无序树: 树种节点各子树之间的次序是不重要的。可以随意交换位置。
森林: 0或多棵互不相交的树的集合。例如图二中的两棵树为森林。

2.二叉树、完全二叉树、满二叉树

二叉树: 最多有两棵子树的树被称为二叉树
满二叉树: 二叉树中所有非叶子结点的度都是2,且叶子结点都在同一层次上
完全二叉树: 如果一个二叉树与满二叉树前m个节点的结构相同,这样的二叉树被称为完全二叉树

3.二叉查找树

二叉查找树(Binary Search Tree)是指一棵空树或者具有下列性质的二叉树:
1.若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
2. 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
3. 任意节点的左、右子树也分别为二叉查找树;
4. 没有键值相等的节点。

4.平衡二叉树

1.要么是棵空树,要么其根节点左右子树的深度之差的绝对值不超过1;
2.其左右子树也都是平衡二叉树; 二叉树节点的平衡因子定义为该节点的左子树的深度减去右子树的深度。
3. 则平衡二叉树的所有节点的平衡因子只可能是-1,0,1。

5.红黑树

红黑树也是一种自平衡的二叉查找树。 1.每个结点要么是红的要么是黑的。(红或黑) 根结点是黑的。 (根黑)
2.每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。 (叶黑) 3.如果一个结点是红的,那么它的两个儿子都是黑的。 (红子黑)
4.对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。(路径下黑相同)