数据结构与算法
数据结构是以某种形式将数据结合在一起的集合,而算法是为求解一个问题需要遵循的,被清楚指定的简单指令的集合。相对于与实际情况来说,想要编写出一个高效率的处理程序,就需要解决如何合理地组织数据,建立合适地数据结构,设计较好的算法,来提高程序的执行效率。数据结构与算法的目的是让学生编写出高效的程序。数据结构贯穿了整个程序的始终。算法+数据结构=程序证明了数据结构的重要性。
数据结构研究的是逻辑结构、逻辑结构的延伸及基本算法、物理结构和运算集合(基本操作),逻辑结构里还有线性结构(结构中的数据元素之间存在着一对一的线性关系)、
树性结构(结构中的数据元素之间存在着一对多的层次关系)和
图结构(结果中的元素之间存在着多对多的任意关系,没有源头没有末尾,除非自己指定源头)如图下:
物理结构阐述的是数据与数据之间的逻辑结构如何存储在物理存储器中。存储方式有两种:一种是数组的存储结构顺序表的存储结构,一种是链表的存储结构也就是说它的地址布连续。
算法是描述求解问题方法的操作步骤集合,算法是对特定问题求解步骤的一种描述,它是指令的有限序列。一个算法应该有五个重要特性:一、有穷性,二、确定性,三、可行性,四、输入,五、输出。
算法的设计必须要满足以下四个要求:一、正确性,二、可读性,三、健壮性,四、效率与低存储量需求。
算法的时间复杂度我们通常用算法的执行次数来度量,如图下:
N是数据的规模。
算法中所有语句的总执行次数为Tn=2n3+3n2+2n+1, 即语句总的执行次数是问题的规模n的函数f(n)(Tn= f(n))。进一步地简化,可用Tn表达式中n的最高次幂来度量算法执行时间的数量级,即算法的时间复杂度。常见算法的时间复杂度(从小到大)如图所示:
算法的空间复杂度是以辅助空间作为度量需要辅助的空间,也就是说空间复杂度是作为算法所需存储空间的度量,n也是问题的规模但是因为硬件的存储量高所以都是以时间复杂度为考量不以算法的空间复杂度分析。
线性表的定义是由n(N大与或等于)个相同类型数据元素a1,a2,………an组成的有限序列。
(a1,a2,……an)
其中:
n:数据元素的个数,也称表的长度。
空表:n=0,记为 ()
例如:
我们经常玩的扑克牌,其数据元素——牌,是由牌点、花色两项组成的,是复合数据类型,这种类型的线性表称为复合线性表。
线性表有哪些特征,
一、在非空的线性表,有且仅有一个开始结点a1,它没有直接前趋,而仅有一个直接后继a2;
二、有且仅有一个终端点an,它没有直接后继,而仅有一个直接前趋an-1;
三、其余的内部结点ai(2小于等与i小于等于n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1;
线性表的基本运算,如下: