编程语言
首页 > 编程语言> > Python数据结构

Python数据结构

作者:互联网

Python数据结构

16.1 数据结构

数据是指能够输入计算机中,由计算机所处理的元素结构是指数据之间的关系。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。其表现为计算机存储,组织与处理数据的方式
常用的数据结构有:

说明:堆栈、队列、链表为线性存储结构(线性表),即多个元素的有序序列。堆栈,队列为操作受限的线性表。

16.1.1 数组

数组采用的是连续存储的方式。通过其实地址与偏移量进行访问其中的每个元素。数组具有很好的随机访问特征。

16.1.2 链表

链表存储的数据元素称为结点,在链表中,各个结点是有序的。每个结点分为两个部分:

16.1.3 堆栈

堆栈(简称栈)是一种操作受限的线性表,只能在表头增加或删除元素。我们通常将栈使用竖直的方式来表示,因此,表尾称为“栈顶”,表头称为“栈底”。
栈表现的特征为后进先出。(LIFO——Last In First Out)

16.1.4 队列

队列是一种操作受限的线性表。只能在队尾增加元素,在队头删除元素。
队列表现的特征为先进先出(FIFO)。
当队列的两端都可以增加与删除元素时,这种队列称为双端队列。双端队列可以同时实现队列与堆栈的特征。

16.1.5 树

树是由结点集及连接每对结点的有向边集组成。
如果存在有向边连接A到B,则A为B的父节点(父亲),B为A的子节点(孩子)。没有父节点的结点称为根,没有子节点的结点称为叶子。具有相同父节点的各结点称为兄弟。
从根到某一节点经过的边数称为路径长度。
二叉树是一种树形结构,其特征是任意结点的孩子数不超过两个。一棵二叉树要么为空,要么由根、左子树与右子树组成(左右子树可能为空)。
一棵深度(树的层数)为m,且具有2m-1个结点的二叉树称为满二叉树。
当一棵二叉树的所有结点编号(从上到下,从左到右进行)都与满二叉树一致时,该二叉树称为完全二叉树。
树的遍历可以分为以下三种:

说明:遍历二叉树实际上是将树的非线性结构进行线性化操作。

16.1.6 哈希表

将一组关键字映射到一个有限的地址集上,这种表称为哈希(散列)表。哈希表中,关键字映射到相应的地址需要使用相关的算法,称为哈希函数。关键字映射后所得的存储地址称为哈希(散列)地址。

16.2 算法

16.2.1 算法概述

算法为解决特定问题而给出的一种方案描述。
算法效率的衡量:

16.2.2. 时间复杂度

时间负责度衡量的标准:

16.2.3 空间复杂度

空间复杂度为算法所需的存储空间。

16.3 查找

16.3.1 顺序查找

从前到后,顺序进行查找与关键字相符的元素。
时间复杂度:O(n)

16.3.2 折半查找

选择中间的元素,进行比较,每次排除一半的元素。
时间复杂度:O(logn)。
思考:折半查找一定好于顺序查找吗?

16.4 排序

从稳定性上将,排序可以分为两类:

16.4.1 冒泡排序

冒泡排序是进行两两比较,每次选出一个最大(小)元素,共执行n – 1次。
时间复杂度:最好:O(n) 平均:O(n2) 最差:O(n2)
稳定性:稳定。

16.4.2 选择排序

每次选择一个最小(大)的元素,放入数组的最前端。共执行n – 1次。
时间复杂度:最好:O(n2) 平均:O(n2) 最差:O(n2)
稳定性:不稳定。

16.4.3 插入排序

从第二个元素开始,插入到现有数组中,每个元素都保证插入之后,数组是有序的。
时间复杂度:最好:O(n) 平均:O(n2) 最差:O(n2)
稳定性:稳定。
从插入排序时间复杂度可知,插入排序适合于基本有序的情况。

16.4.4 希尔排序

希尔排序(也称缩小增量排序),根据一定的增量,将记录分组,然后对每组进行插入排序。
因为在基本有序的情况下,插入排序的时间复杂度可以从O(n2)提升至O(n),故希尔排序是插入排序的一种改进版。
希尔排序的最优增量序列是一个非常复杂的问题,没有固定的选择原则,但通常情况下,应该令增量序列的每次减半,并且增量序列的最后一个值一定是1。
时间复杂度:最好:与间隔相关 平均:与间隔相关 最差:O(n2)
稳定性:不稳定。

16.4.5. 快速排序

从数组中选出一个中心点(pivot),使得中心点左侧的元素都小于(大于)该元素,中心点右侧的元素都大于(小于)该元素。然后针对中心点分割的这两个区间,继续执行递归的快速排序,直到整个数组区间全部有序。
时间复杂度:最好:O(nlogn) 平均:O(nlogn) 最差:O(n2)
稳定性:不稳定。

16.4.6 归并排序

归并排序为将两个有序的数据集合并成一个有序的数据集。
最好:O(nlogn) 平均:O(nlogn) 最差:O(nlogn)
空间复杂度:O(n)
稳定性:稳定

标签:排序,Python,复杂度,元素,链表,16.4,16.1,数据结构
来源: https://blog.csdn.net/PecoHe/article/details/90204531