数据结构
一、什么是数据结构?
数据结构是计算机 存储、组织数据 的方式。
二、学习数据结构有什么用?
1、数据结构是编程最重要的基本功之一
2、程序=数据结构+算法
3、扩展思路,提高解决实际应用问题的能力
4、为将来的人工智能、大数据、云计算等领域奠定基础
三、数据结构主要学什么?
1、数据之间的关系,将离散的数据规整划一
2、如何将这个关系具体实现并存储到计算机中
3、基于关系之上对数据的具体操作,增删查改等
4、数据结构的具体使用场景
四、数据结构有哪些?
数据结构分为以下八大类:
数组、栈、队列、链表、树、散列表、堆、图
五、数据的逻辑结构
定义:数据元素之间的相互联系方式 称为 数据的逻辑结构。
主要分为:线性结构、树状结构和图形结构三种。
六、数据的存储结构(物理结构)
定义:数据元素在计算机中的存储方式 称为 数据的存储结构。
基本形式:
通常用数组来实现,数组中空间本身是连续的,保证了数据之间的关系
通常用节点来实现,节点不仅要存储数据还要存储下一个节点的位置以保证数据之间的关系
算法
一、什么是算法?
定义:是描述求解问题方法的操作步骤集合。
是解决特定问题求解步骤的描述,分析问题,一步一步求解,并得到结果。这一系列的步骤就称之为算法。
二、算法的性质:
输入性、输出性、有限性、确定性、可执行性。
三、算法时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。
算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。
它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度。简称时间复杂度。其中f(n)是问题规模n的某个函数
tip:算法时间复杂度主要探究的是问题输入规模N的数量级,而不是算法的具体执行次数。计算时忽略常数、只保留幂高项、且忽略幂高项的系数。
常数阶O(1):就是那些无循环、无递归、与问题输入规模N无关的、逐行执行的代码。
线性阶O(n):与问题输入规模有关的,主要是一层循环的代码,多个一层循环可以并列但不能包含。
线性阶O(n+m):和线性阶O(n)一样,只不过有两种数据的输入规模。
平方阶O(n**2):与问题输入规模有关的,主要是二层嵌套循环的代码。
平方阶O(n*m):和平方阶O(n2)一样,只不过有两种数据输入规模。
对数阶O(logn):与问题输入规模有关的,主要是一层循环迭代或递归的代码。
算法和数据结构的关系
凡有数据“扎堆”的地方,就有数据结构的影子
凡有数据结构的地方,脱离不了算法的“折磨”
数据结构用于解决数据存储问题,而算法用于处理和分析数据