第1章、绪论
一、什么是数据结构:
1.数据: 是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
2.数据元素: 数据元素是数据的基本单位,也叫做节点或记录。在计算机程序中通常作为一个整体进行考虑和处理。(一个数据元素可由若干个数据项组成.)
3.数据对象: 数据对象是性质相同的数据元素的集合,数据的一个子集。
4.数据结构: 相互之间存在一种或多种特定关系的数据元素的集合,主要包
括三方面的内容:(逻辑结构、存储结构、数据的运算)。
二、数据的逻辑结构:
指数据元素之间的逻辑关系,它与数据的存储无关,是独立于计算机的。主要是分为(线性结构、非线性结构)两大类。
①线性结构:结构中的数据之间只存在一对一的关系,主要代表有(线性表、队列、栈、数组)。
它有四个基本特征:第一个元素,最后一个元素,前驱元素,后继元素
②非线性结构:存在着一对多的关系,它又可以多对多的关系,主要有(集合、树、图)。
三、数据的存储结构:
1.顺序存储结构: 把逻辑上相邻的元素存储在物理位置也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
2.链式存储结构: 不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。
3.索引存储结构: 在存储元素信息的同时,还建立附加的索引表。
4.哈希存储结构: 根据元素的关键字直接计算出该元素的存储地址。
四、算法的重要特征:
有穷性,确定性,可行性,输入,输出。
优秀算法的标准:准确性,可读性,健壮性,效率与低存储量需求。
五、算法效率的度量:
①时间复杂度:
一般情况下,算法中基本操作的重复次数作为问题规模 n 的某个函数 f(n),算法的时间度量记作 T(n)=O(f(n)),表示随着问题规模 n 的增大,算法执行时间增长率和 f(n)的增长率相同,称为时间复杂度。(时间复杂度取决于:问题的规模、待处理的数据初态)
②空间复杂度:
S(n)定义为该算法所耗费的存储空间,是问题规模 n 的函数。
规律: O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<…<O(nk)<O(2n)<O(n!)
第2章、线性表
线性表是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(大部分线性表)
特点:
1.除第一个元素外,每一个元素都有一个直接前驱元素,除最后一个元素外,每一个元素都有一个直接后驱元素
2.数据元素是组成数据的基本单位,是数据集合的个体,在计算机中通常作为整体进行处理,也称结点或记录。
3.数据项是有独立含义的数据最小单位,也称项或字段数据对象是性质相同的数据元素的集合,是数据的一个子集
4.线性表由有限个元素组成,且由同类型数据元素组成,每一个数据元素都属于同一个数据对象
一、顺序表
用一段地址连续的存储单元依次存储线性表的数据元素。顺序存储结构在逻辑结构和物理存储结构中都是依次序互相紧挨着。每个数据元素的地址=首元素的地址+一个该数据类型所占空间大小*数组下标。
优点:查询速度快,时间复杂度为O(1)
缺点:1.插入元素速度慢,时间复杂度为O(n)2.表中元素个数需要提前定义
时间复杂度:
不论数据元素量N有多大,只需要get(i)一次就拿到对的元素,所以时间复杂度为O(1)。
每一次插入,都需要把i的位置后面的元素移动一次,随着元素N的增大,移动的元素也越多,时间复杂度为O(n)。
每一次删除,都需要把i的位置后面的元素移动一次,随着元素的N的增大,移动的元素也越多,时间复杂度O(n)。
二、链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。它不像顺序表那样连续存储元素,而是在每一个节点里存到下一个节点的指针。
优点:内存空间不连续,头插头删效率高,没有空间限制,不会溢出,可以存储很多元素
缺点:不支持随机访问,查找效率低,需遍历查找
2.1单链表:单链表是链表的一种,它是由多个结点组成的,每一个结点由一个数据域和一个指针域组成,数据域是用来存储数据,指针域是用来指向下一个结点,头结点的数据域不存储数据,尾结点的指针域是空的。
2.2双链表
双链表也是链表的一种,也是由多个结点组成的,每一个结点由一个数据域和两个指针域组成的,数据域是用来存储数据,两个指针域是用来指向上一个结点和下一个结点,头结点没有指向上一个结点也不存储数据,尾结点没有指向一下一个结点但是它指向上一个节点和存储数据List
链表的时间复杂度 :
1.每一次查询都需要从链表的头部开始一次向后查找,随着数据元素N的增多比较的元素越多时间复杂度为O(n)。
2.每一次插入需要找到i位置的前一个元素,然后在插入数据,随着数据元素的增多,查找的元素越多,时间复杂度为O(n)。
3.每一次移除需要找到i位置的前一个元素,然后在移除数据,随着数据元素的增多,查找的元素越多,时间复杂度为O(n)。
1万+


&spm=1001.2101.3001.11974&articleId=127042733&d=1&t=3&u=5b0e7068f162402ba83e7b3c25341d9a)

被折叠的 条评论
为什么被折叠?



