2019独角兽企业重金招聘Python工程师标准>>>
数据结构 主要研究问题的求解方法 典型数据结构的算法 程序设计方法
包含三方面:数据的逻辑结构 数据的存储结构(物理结构) 数据的运算
逻辑结构:指反映数据元素之间的逻辑关系的数据结构
1集合机构:数据元素同属于一个集合,他们之间是并列的关系,除此之外没有其他关系
2线性结构:线性结构中的元素存在一对一的相互关系
3树形结构:树形结构中的元素存在一对多的相互关系
5图形结构:图形结构中的元素存在多对多的相互关系
物理结构:数据的逻辑结构在计算机存储空间的存放形式
1 顺序存储
是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的 数组是代表
2 链式存储
是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的。数据元素之间是通过指针连接
顺序结构和链式结构的区别:
比如去银行取钱,顺序存储结构就相当于,所有的客户按照先来后到的顺序有序的的坐在大厅的椅子上(注意:是有顺序的坐着哦)
而链式存储结构相当于,所有的客户只要一到银行,大堂经理就给他们每人一个号码,然后他们可以随便坐在哪个椅子
(随便坐,不需要按照什么顺序坐),只需要等待工作人员广播叫号即可。而每个客户手里的号码就相当于指针,
当前的指针指向下一个存储空间,这样,所有不连续的空间就可以被有顺序的按照线性连接在一起了
目的:提高数据处理的效率
体现:数据的处理速度,尽量节省数据处理过程中所占用计算机的存储空间
数据类型:初等类型和复合类型
数据结构: 线性数据结构和非线性数据结构
线性结构:数据结构里有且仅有一个终端节点和一个开始节点,所有节点只有一个前驱和一个后驱【数组】
非线性结构:不满足线性结构的数据(树和图)
线性结构表示:K={A,B,C,D,E,F}
R=<A,B>,<B,C>,<C,D>,<D,E>,<E,F>
计算机存储器 有有限个存储单元 每个单元有唯一的地址,存储单元是连续编址的
4种基本存储映像的方法:
顺序方法:逻辑上相邻的节点存放在物理是相邻的存储单元
链接方法:每个节点附上指针字段。节点本身与存放后继节点的存储单元地址
索引方法:引用节点的索引号来去顶节点的存储位置
散列法:根据节点的值确定它的存储地址,用散列函数
数据的运算时定义在逻辑结构上的,具体实现在 存储结构上进行
常见的运算: 检索 插入 更新 删除 排序 遍历
算法:解决某一个问题采取的方法和步骤
算法分为:数值算法和非数值算法
算法五个特点:
1有限操做步骤(有穷性)
2每一个错做步骤是确定的(确定性)
3从外界输入信息(输入)
4输出信息(输出)
5每一步骤都应有效(有效性)
算法的表示方法:
1 自然语言
2 伪代码表示 BEGIN开始 END结束
3 流程图表示(用流程线连接起来表示算法的步骤和过程的图形)
4 结构化流程图N-S图
5 PAD图表示 (类似Windows操作系统中资源管理器的形式)在左边形成一条流程线
评价算法的优劣:时间复杂度和空间复杂度,即算法执行过程中所占用的存储单元数目和算法执行的时间效率
一 时间复杂度
算法的时间复杂度是指执行该算法的基本运算次数的计算,不仅取决于输入处理数据的大小,也取决于数据本身的性质
例如:排序中的基本运算是比较运算,忽略了赋值运算;矩阵乘法算法中的基本运算时乘法运算,忽略加法运算
不用的算法中基本运算不同。
二 空间复杂度
算法执行过程中 所占的存储单元的数目成为空间复杂度
时间复杂度比空间复杂度重要,所有在做算法分析时一般指的是时间复杂度
常见的时间复杂度表示:
O(1)
O(log2n)
O(n)
O(n^2)
O(2^n)
2.1.1 线性表
线性结构有线性表 堆栈 队列 线性链表
线性表地址;第i个元素的地址为:
LOC(ai)=LOC(a1)+(i-1)x1
线性表运算 7基本运算:
(1)取出线性表中第i个元素
(2)修改线性表中第i个元素
(3)在线性表中第i个元素后插入一个元素
(4)删除线性表中第i个元素
(5)按某种要求重排线性表中元素的顺序
(6)在线性表中查找满足条件的元素
(7)判断线性表是否为空
2.1.2 堆栈【内存】
堆栈又称为栈(先进后出) 在函数内部声明的所有变量都将占用栈内存。
栈的工作方式:(1)栈底是可动的,栈顶是固定的
(2)栈底是固定的,栈顶是可动的
堆栈的基本运算:
(1)栈的押入
(2)栈的弹出
(3)读栈顶元素
(4)判断栈是否为空
(5)取出栈顶元素
(6)判断栈是否为满
2.1.3 堆
堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存
福利: 数据结构的可视化工具:
http://visualgo.net