第一章 数据结构和算法
1.1 算法
1、算法是指解题方案正确而完整描述。换句话说,算法是对特定问题求解步骤一个描述。
*算法不等于程序,也不等于计算方法。程序编制不可能优于算法设计(注释1)?。
2、算法基础特征
(1)可行性。针对实际问题而设计算法,实施后能够得到满意结果。
(2)确定性。每一条指令含义明确,无二义性。而且在任何条件下,算法只有唯一一条实施路径,即相同输入只能得出相同输出。
(3)有穷性。算法必需在有限时间内完成。有两重含义,一是算法中操作步骤为有限个,二是每个步骤全部能在有限时间内完成。
(4)拥有足够情报。算法中多种运算总是要施加到各个运算对象上,而这些运算对象又可能含有某种初始状态,这就是算法实施起点或依据。所以,一个算法实施结果总是和输入初始数据相关,不一样输入将会有不一样结果输出。当输入不够或输入错误时,算法将无法实施或实施有错。通常说来,当算法拥有足够情报时,此算法才是有效;而当提供情报不够时,算法可能无效。
*:总而言之,所谓算法,是一组严谨地定义运算次序规则,而且每一个规则全部是有效,且是明确,此次序将在有限次数下终止。
3、算法复杂度关键包含时间复杂度和空间复杂度。
(1)算法时间复杂度是指实施算法所需要计算工作量,能够用实施算法过程中所需基础运算实施次数来度量。
(2)算法空间复杂度是指实施这个算法所需要内存空间。
注释1:这是因为在编写程序时要受到计算机系统运行环境限制,程序通常还要考虑很多和方法和分析无关细节问题
1.2 数据结构基础概念
1、数据结构是指相互相关联数据元素集合。
2、数据结构关键研究和讨论以下三个方面问题:
(1)数据集合中各数据元素之间所固有逻辑关系,即数据逻辑结构。
数据逻辑结构包含:1)表示数据元素信息;2)表示各数据元素之间前后件关系[wx1] 。
(2)在对数据进行处理时,各数据元素在计算机中存放关系,即数据存放结构。
数据存放结构有次序、链接、索引等。
1)次序存放。它是把逻辑上相邻结点存放在物理位置相邻存放单元里,结点间逻辑关系由存放单元邻接关系来表现。由此得到存放表示称为次序存放结构。
2)链接存放。它不要求逻辑上相邻结点在物理位置上亦相邻,结点间逻辑关系是由附加指针字段表示。由此得到存放表示称为链式存放结构。
3)索引存放:除建立存放结点信息外,还建立附加索引表来标识结点地址。
*:数据逻辑结构反应数据元素之间逻辑关系,数据存放结构(也称数据物理结构)是数据逻辑结构在计算机存放空间中存放形式。同一个逻辑结构数据能够采取不一样存放结构,但影响数据处理效率。
(3)对多种数据结构进行运算。
3、数据结构图形表示
一个数据结构除了用二元关系表示外,还能够直观地用图形表示。在数据结构图形表示中,对于数据集合D中每一个数据元素用中间标有元素值方框表示,通常称之为数据结点,并简称为结点;为了深入表示各数据元素之间前后件关系,对于关系R中每一个二元组,用一条有向线段以前件结点指向后件结点。
4、数据结构分为两大类型:线性结构和非线性结构。
(1)线性结构(非空数据结构)条件:1)有且只有一个根结点[wx2] ;2)每一个结点最多有一个前件,也最多有一个后件。
*:常见线性结构有线性表、栈、队列和线性链表等。
(2)非线性结构:不满足线性结构条件数据结构。
*:常见非线性结构有树、二叉树和图等。
注释1:前后件关系:通常情况下,在含有相同特征数据元素集合中,各个数据元素之间存在某种关系(即联络),这种关系反应了该集合中数据元素所固有一个结构。在数据处理领域中,通常把数据元素之间这种固相关系简单地用前后件关系(即直接前驱和直接后继关系)来描述。
注释2:在数据结构中,没有前件结点称为根结点。
1.3 线性表及其次序存放结构
1、线性表由一组数据元素组成,数据元素位置只取决于自己序号,元素之间相对位置是线性。线性表是由n(n≥0)个数据元素组成一个有限序列,表中每一个数据元素,除了第一个外,有且只有一个前件,除了最终一个外,有且只有一个后件。线性表中数据元素个数称为线性表长度。线性表能够为空表。
*:线性表是一个存放结构,它存放方法:次序和链式。
2、线性表次序存放结构含有两个基础特点:(1)线性表中全部元素所占存放空间是连续;(2)线性表中各数据元素在存放空间中是按逻辑次序依次存放。
*:由此能够看出,在线性表次序存放结构中,其前后件两个元素在存放空间中是紧邻,且前件元素一定存放在后件元素前面,能够经过计算机直接确定第i个结点存放地址。
3、次序表插入、删除运算(学吧学吧独家稿件)
(1)次序表插入运算:在通常情