持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情。
王道数据结构精讲。
数据结构三要素:逻辑结构、数据的运算、物理结构(存储结构)。
逻辑结构:集合、线性(一对一)、树形(一对多)、图状(多对多)。 物理结构:顺序存储、链式存储、索引存储、散列存储(哈希存储*)。
算法五个特性:有穷、确定、可行、输入、输出。
算法的效率:时间复杂度和空间复杂度
时间复杂度:---时间开销与问题规模n之间的关系
循环
一个算法的时间复杂度表示只用考虑高阶部分!
嵌套循环:
练习:①求时间复杂度
②平均时间复杂度
总结:一般而言,参考最坏时间复杂度和平均时间复杂度(所有输入示例等概率出现的情况下,算法的期望运行时间)。
空间复杂度:---空间开销(内存开销)与问题规模n之间的关系。
实际应用中只需关注存储空间大小与问题规模相关的变量。
注 * 空间复杂度 = 递归调用的深度。
线性表
linear adj.线的,线型的;直线的,线状的;长度的
list n.列表,清单,目录
基本操作:
①对数据的操作:增删改查,创销
②C语言函数定义---<返回值类型>函数名(<参数1类型>参数1,<参数2类型>参数2,.....)
③函数名和参数形式可改变
④基本操作中括号里的“&”何时要传入引用“&”--对参数的修改结果需要“带回来”
⑤线性表中数据元素的位序(从1开始)注意审题
顺序表
静态分配:
声明length=0这一步必须做。
动态分配:
key:动态申请(malloc)和释放(free)内存空间
C--malloc、free函数存在于头文件<stdlib.h>中
*malloc函数返回一个指针,需强转成你定义的数据元素类型指针。
malloc函数的参数,指明要分配多大的连续内存空间。
顺序表特点(按静态动态考虑):
①*随机访问,即可以在O(1)时间内找到第i个元素。
②存储密度高,每个节点只存储数据元素。
③拓展容量不方便。
④插入删除不便,需移动大量元素。
顺序表的插入操作
顺序表的删除操作
插入与删除的时间复杂度:最好O(1)、最坏O(n)、平均O(n)。
代码中注意位序i和数组下标的区别。
插入位置之后的元素都要后移。
删除位置之后的元素都要前移。
练习:
计算机内部数据处理的基本单位是数据元素。
基本单位数据元素,最小单位数据项。
一些表面上很不相同的数据可以有相同的逻辑结构。
数据对象是有相同特征数据元素的集合,是数据的子集。
数据结构是指数据元素的组织形式。(逻辑+存储+运算)存储运算与计算机有关,逻辑与计算机无关。
计算机算法是解决问题的优先运算序列。
一个算法应该是问题求解步骤的描述。