数据结构笔记(一)
1. 绪论
随着计算机深入到各个领域,它的作用已不再局限于科学计算,而更多的用于控制,管理及数据处理等非数值计算的处理工作。而它加工出理的对象也由纯粹的数值发展到字符,表格和图像等各种具有一定结构的数据。一个“好”的程序,必须分析待处理的对象的特性以及各处理对象之间存在的关系。这就是数据结构这门学科产生的背景。
1.1 什么是数据结构?
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等的学科。
数据结构是计算机存储、组织数据的方式,是数据之间表现关系和处理关系的一种形式
作用:可以带来更高的运行效率或者存储效率
1.2 数据结构的划分
1、线性结构:在数据元素的非空有限集合中,存在唯一一个被称做“第一个”的元素,存在唯一一个被称做“最后一个”的元素,除第一个之外,集合中的每个数据元素均只有一个前驱,除最后一个以外,每一个元素都只有一个直接后继。
2、非线性结构:一个数据元素可能有多个直接前趋和多个直接后继
1.3 数据结构的术语
逻辑(数据)结构:数据元素之间的逻辑关系
存储(物理)结构:数据结构在计算机中的表示
算法的设计取决于逻辑结构而算法的实现依赖于采用的存储结构
时间复杂度:定量描述了该算法的运行时间 n:元素的个数
时间复杂度的大小排序: O(1) 、O(log n)、O(n)、O(nlog n) 、O(n^2) 、O(n^3)、 O(2^n)
O(1):字典取值 、list.pop()
O(log n):二分查找
O(n):遍历、list.get(index)
O(nlog n):快速排序、归并排序
O(n^2):冒泡、选择排序
空间复杂度:空间复杂度是指执行这个算法所需要的内存空间
1.4 常用的数据结构