快速排序原理,讲的比较好。
1.1 什么是数据结构
数据结构研究的主要内容:
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
1.2 基本概念和术语
·数据(data):所有能被输入到计算机中,且被计算机处理的符号的集合是计算机操作对
象的总称。
·数据元素(data element):是数据的基本单元,由若干个数据项组成,也称结点,元素,
顶点或记录。
·数据项(data item):是数据不可分割的最小单位,有时也称为域(field),即数据表中的
字段。
·数据对象(data object):性质相同的数据元素的集合,是数据的一个子集,如大写字母
字符数据对象是集合C = {‘A’,’B’,’C’,……,’Z’},整数数据对象是 集合{0,±1,±2, … }。
·数据结构(data structure):是指互相之间存在着一种或多种关系的数据元素的集合。数
据元素之间的关系称为结构。
四种基本数据结构:
(1)集合:数据元素间“同属一个集合”。
(2)线性结构:一个对一个,如线性表,栈,队列。
(3)树形结构:一个对多个,如树。
(4)图状结构:多个对多个,如图。
数据结构的形式定义:
Data-Structure = (D,S)
D:数据元素的有限集;
S:D上关系的有限集。
例:在计算机科学中,复数可取如下定义:
复数是一种数据结构
Complex=(C,R)
其中,C是含两个实数集合{c1,c2};R={P},P是定义在集合C上的一种关系{<c1,c2>},其中有序偶<c1,c2>表示c1是复数的实部,c2是复数的虚部。
数据的逻辑结构:只反映数据元素的逻辑关系。
数据的存储(物理)结构:数据的逻辑结构在计算机存储器中的存储形式(或称映像)。
元素/结点:用于表示数据元素的二进制位(bit)的位串。
数据域:用于表示数据项的二进制位(bit)的位串。
例:(321)10=(501)8=(101000001)2
A=(101)8=(001000001)2
存储结构分为:
顺序存储结构:借助元素在存储器中的相对位置来表示数据元素间的逻辑关系
链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系
链式存储结构,由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储的弱点,但同时也失去了顺序表可随机存储的优点。
静态链表和动态链表的区别:
静态链表和动态链表是线性表链式存储结构的两种不同的表示方式。
1、静态链表是用类似于数组方法实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配地址空间大小。所以静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针。
2、动态链表是用内存申请函数(malloc/new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。
栈和队列
和线性表类似,队列也可以有两种存储表示。
用链表表示的队列简称为链队列。
串
1、串的概念
字符串简称串,是一种特殊的线性表,它的数据元素仅由一个字符组成。
2、串的定义
串(String)是由零个或多个字符组成的有限序列,又称字符串。
其中s是串名,用双引号括起来的字符序列为串值,但引号本身并不属于串的内容。ai(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号;n为串的长度,表示串中所包含的字符个数。
例子1:字符串的长度及子串的位置。
字符串
S1=”SHANG”
S2=”HAI”
S3=”SHANGHAI”
S4=SHANG HAI”
S1是S3、S4的子串,S1在S3、S4中的位置都为1。
S2也是S3、S4的子串,S2在S3中的位置为6;S2在S4中的位置为7。
np.floor 返回不大于输入参数的最大整数。 即对于输入值 x ,将返回最大的整数 i ,使得 i <= x。 注意在Python中,向下取整总是从 0 舍入。比如输出原来是0.2,在np.floor下就是0.
随机访问和连续内存:
1、说明随机访问是如何工作的,以及它为什么这么快?
因为随机访问的内存是连续的(这是想要随机访问的代价),而且计算机不一定必须在数组中搜索一个给定的单元。python数组的索引操作有两个步骤:
1.获取数组内存块的基础地址。
2.给这个地址加上索引,返回最终的结果。
2、说明数组的物理大小和逻辑大小的区别?
如果逻辑大小为0,数组为空。也就是说,该数组不包括数据项。
否则,在任何给定的时间,数组的最后一项的索引都是其逻辑大小减1。
如果逻辑大小等于物理大小,数组已经被填满了。
.
数据结构总结篇
python中数组(numpy.array)的基本操作
树和二叉树
结点拥有的子树数称为结点的度。度为0的结点称为叶子或终端结点。
二叉树特点是每个结点最多只有两棵子数,即二叉树的子树有左右之分,不存在度大于2的结点。
二叉树性质:1、在二叉树的第i层上至多有2i-1个结点(i>=1)。
2、深度为k的二叉树至多有2k-1个结点。(k>=1)
3、对于任何一棵二叉树T,如果其终端节点数为n0,度为2的结点数为n2,则n0=n2+1。