数据结构与算法整理学习

180 阅读4分钟

数据结构是指相互存在一定关系的数据元素的集合,按照划分不同,数据结构的逻辑结构和存储结构,算法依附于数据结构,是对数据的运算,主要包含插入、修改、删除、查找、排序等。

逻辑结构

  • 集合:数据元素之间属于同一个集合,无其他关系
  • 线性结构:数据之间存在一对一的线性关系
  • 树结构:数据元素之间存在一对多的层次关系
  • 图结构:数据元素之间存在多对多的任意关系

存储结构(物理结构)

  • 顺序存储结构:把逻辑上相邻的结点存储在物理位置相邻的存储单元里,顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现

  • 链接存储结构:结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。

  • 索引结构

  • 散列结构(哈希)

数据运算

运算包含插入、修改、删除、查找、排序。

常见的数据结构

线性表

线性表常见的数据结构有(数组、栈、队列)顺序表,链表。

  • 数组

  • 链表

  • 队列

树是一种比线性结构更为复杂的数据结构,适合描述层级关系的数据,拥有几个子树数目就是该节点的树的深度是树的层次数

  • 二叉树

特点是,子节点不能有超过2个度的子树,左右子树是有顺序的,替换后是不同的二叉树,当节点只有一个子树,也要区分左右。

完全二叉树

对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。

满二叉树

在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。

  • B树

B树特点

  • 根节点至少有两个子节点
  • 每个节点有最多有M子树,数据按从小到大排列
  • 叶子节点在一层

B+树

  • 比B树的查询性能更高
  • 叶子节点包含了全部的数据,并且按顺序排列,B+树使用一个链表将它们排列起来,这样在查询时效率更快。

图是比树更复杂的数据结构,树是一对多,图是多对多,基本构成元素是点和边,有些边还不一样,称之为带权图,没有权重的称为无权图

有的是点与点之间的关系不一样,方向不同称为有向图

点与点之间没有关系的图称为无向图 图的表示有很多种,包括邻接矩阵、邻接表、逆邻接表、十字链表等

查找

静态查找 数据元素的静态表,只做查找,不对数据元素改变等其他操作

动态查找 与静态查找不同的是,会经常对表进行改动的操作,因此对数据的存储需要更加的灵活 常见的动态查找有二叉排序树、B树等,但是效率上都是需要做查询对比,理想状态是key—value是一一对应的,也就是哈希表

哈希表(散列表) 哈希表相对于二叉树,查找和插入的时间复杂度都是o(1),但是哈希在插入大量数据的时候,会有很大的冲突性的可能。哈希在js中的一般形式就是对象,key-value

排序

排序可分为:内部排序和外部排序。 外部排序是指数据量太大的时候,由于内存不够,需要借助外存的排序方法,以下介绍到的排序方法均属于内排

  • 简单排序:直接插入排序、冒泡排序、简单选择排序
  • 希尔排序
  • 快速排序
  • 堆排序
  • 归并排序

本次分享,文字图片源于网络以及一些书籍,仅供学习分享。