python--基础知识点梳理(之数据结构)

数据结构:

# 按逻辑结构(面向问题)分为:集合结构、线性结构、树形结构、图形结构

# 按物理结构(面向计算机)分为:
  # 顺序存储结构(把数据元素放在地址连续的存储单元中,数据间的逻辑关系和物理关系一直。如数组)
  # 链式存储结构(把数据元素放在任意的存储单元中,数据间使用指针关联。元素的存储关系不能反映其逻辑关系。如链表)

顺序表:(存储结构连续list、tuple)

# 优点:支持随机访问

# 缺点:插入和删除操作需要移动大量的元素,造成存储空间的碎片。顺序表适合元素个数变化不大,且更多是读取数据的场合。

链表:(存储结构上不连续,逻辑上连续)

# 缺点:不能顺序表随机读取

# 优点:链表犹豫增加了节点的指针域,空间开销比较大,可以充分利用计算机内存空间,实现灵活的内存动态管理

栈stack:

# 栈是一种数据集合,可以理解为只能在一端进行插入或删除操作的列表。先进后出

队列queue:

# 队列是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除。先进先出

栈和队列的区别:

# 都是特殊的线性表,可以使用顺序存储结构和链式存储结构两种方式来实现。

链表:

# 单向链表:也称单链表,是链表中最简单的一种形式,它的没一个节点包含两个域,一个信息域(元素域)和一个链接与,这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个控制

# 单向循环链表:单链表的一个变形是单向循环链接,链表中最后一个节点的连接中不再是None,而是指向单向链表的头结点

# 双向链表:每个节点有两个链接,一个指向前一个节点,当此节点为第一个节点时,指向空值,而另一个指向下一个节点,当此节点为最后一个节点时,指向空值

  

树:是一种抽象数据类型或是实作这种抽象数据类型的数据结构

分类:无序树、有序树

无序树(自由树):树中任意节点的子节点之间没有顺序关系。

特点:每个节点有零个或多个子节点

     没有父节点的节点称为根节点

   没一个非根节点有且只有一个父节点

   除了根节点外,每个子节点可以分为多个不相交的子树

有序树:树中任意节点的子节点之间有顺序关系。

  二叉树:二叉树是一种特殊的树,二叉树的特点是每个节点最多有两个子节点,二叉树适用范围最广,一颗多叉树也可以转化为二叉树

# 完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树

# 满二叉树:所有叶节点都在最底层的完全二叉树,除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树

树的遍历:对树中所有节点信息的访问

  分类:广度优先遍历、深度优先遍历

# 广度优先遍历:层次遍历,从树的root开始,从上到下从左到右遍历整个树的节点

# 深度优先遍历:沿着输的深度遍历输的节点,尽可能深的搜索树的分支

  分类:先序遍历、中序遍历、后序遍历

  先序遍历:根节点----》左子树----》右子树

  中序遍历:左子树----》根节点----》右子树

  后序遍历:左子树----》右子树----》根节点

算法的复杂度:时间复杂度、空间复杂度

时间复杂度:指执行算法所需要的计算工作量

# O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
#
常数阶、对数阶、线性阶、nlogn阶、平方阶、立方阶指数阶、

空间复杂度:指执行这个算法所需要的内存空间

python中字典对象的实现原理

哈希表(也叫散列表):根据键值对而直接进行数据访问的数据结构,他通过把key和value映射到表中一个位置来访问记录,而这个映射函数叫做哈希函数,存放至的数组叫做哈希表

关系型数据库索引存储结构

hash树:从2开始连续的质数来建立一个10层的树,第一层为根节点

关系型数据库中,索引大多采用B/B+tree来作为存储结构,而全文搜索引擎的索引主要采用hash的存储结构。索引查找用B+树

hash树优点:结构简单、查找迅速、结构不变

缺点:无序,只能精确查找

B-树:根据键值分割往下分割,组成:键值(主键)、指针数据

B+树:只放主键和和指针,底层放数据,节省额外的开销,效率更高

B-tree与哈希索引的区别

  B-tree的索引:按照顺序存储的,所以如果按照B-tree索引,可以直接返回,带顺序的数据,但这个数据只是该索引列含有的信息

  适用于:精确匹配、范围匹配、最左匹配

  hash索引:索引列值的哈希值+数据行指针,因此找到后还需要根据指针去找数据

  适合:精确匹配

  不适合:模糊匹配、范围匹配、不能排序

 

B+树相对于B-Tree有几点不同:

  非叶子节点只存储键值信息

  所有叶子节点之间都有一个链指针

  数据记录都存放在叶子节点中

原作者:不做大哥好多年

链接:https://www.cnblogs.com/xiaonq/p/10405473.html#i1

原文地址:https://www.cnblogs.com/lutt/p/11201192.html