1、基础知识
1、数据结构三要素:逻辑结构、存储结构、数据的运算;其中逻辑结构包括线性结构(线性表、栈、队列)和非线性结构(树、图、集合)
2、数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
3、数据元素是数据的基本单位,可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位
4、数据对象是具有相同性质的数据元素的集合,是数据的一个子集
5、数据类型是一个值的集合和定义在此集合上的一组操作的总称
6、数据类型包括:原子类型、结构类型、抽象数据类型
7、数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括逻辑结构、存储结构和数据运算三方面内容
8、数据的逻辑结构和存储结构是密不可分的,算法的设计取决于所选定的逻辑结构,而算法的实现依赖于采用的存储结构
9、数据的存储结构主要有顺序存储、链式存储、索引存储和散列存储
10、施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤
11、在存储数据时,通常不仅要存储各数据元素的值,而且要存储数据元素之间的关系
12、对于两种不同的数据结构,逻辑结构或物理结构一定不同吗? 数据运算也是数据结构的一个重要方面。对于两种不同的数据结构,他们的逻辑结构和物理结构完全有可能相同(比如二叉树和二叉排序树)
13、链式存储设计时,各个不同结点的存储空间可以不连续,但结点内的存储单元地址必须连续
14、算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令包括一个或多个操作。
15、算法的五个特性:有穷性、确定性、可行性、输入、输出
16、通常设计一个好的算法应考虑:正确性、可读性、健壮性、效率与低存储量需求
17、算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质
18、若输入数据所占空间只取决于问题本身而和算法无关,则只需分析除输入和程序之外的额外空间
19、算法原地工作是指算法所需辅助空间为常量,即O(1)
20、一个算法应该是问题求解步骤的描述
21、所谓时间复杂度,是指最欢情况下估算算法执行时间的一个上界
22、同一个算法,实现语言的级别越高,执行效率越低
23、空间复杂度是对一个算法在运行过程中额外占用存储空间大小的度量。空间复杂度不是程序占用了多少bytes的空间,空间复杂度算的是变量的个数。
2、线性表(顺序表和链表)
顺序表(Sequential List): 顺序表是一种连续的存储结构,数据元素在内存中占据一块连续的存储空间。它可以通过下标来直接访问元素,因此支持随机访问。顺序表可以使用数组来实现,每个元素占据固定大小的内存空间。
优点:
随机访问性能好:由于顺序表的元素在内存中连续存储,可以通过下标直接访问元素,因此随机访问的时间复杂度为O(1)。 存储效率高:顺序表不需要额外的存储空间来存储指针,只需要存储元素本身,因此相对于链表来说,存储效率较高。
缺点:
插入和删除操作复杂:由于顺序表是连续存储的,当需要插入或删除元素时,需要移动其他元素来腾出空间或填补空缺,因此时间复杂度为O(n),其中n是元素的个数。 存储空间固定:顺序表在初始化时需要指定固定大小的存储空间,如果元素数量超过了预设的大小,需要进行扩容操作,这可能导致时间和空间的浪费。
链表(Linked List): 链表是一种离散的存储结构,数据元素存储在称为节点的单元中,每个节点包含数据和指向下一个节点的指针。通过链接各个节点,形成数据的逻辑顺序。
优点:
插入和删除操作简单:由于链表的节点通过指针链接,插入和删除操作只需要修改指针的指向,不需要移动其他元素,因此时间复杂度为O(1)。 灵活使用内存空间:链表可以根据实际情况动态分配内存空间,只需要在插入新节点时分配新的内存,因此避免了固定大小的存储空间的限制。
缺点:
随机访问性能差:由于链表中的元素并不连续存储,访问元素需要通过指针依次遍历,因此随机访问的时间复杂度为O(n),其中n是元素的个数。 需要额外的存储空间:链表的每个节点需要额外的指针来指向下一个节点,这样会占用额外的存储空间,相对于顺序表来说,存储效率较低。 顺序表适用于需要频繁进行随机访问的场景,而链表适用于频繁进行插入和删除操作的场景。
标签:存储,复杂度,元素,基础,链表,算法,数据结构,数据 From: https://blog.csdn.net/m0_46479109/article/details/140654820