这几天坐火车回家,没有继续写博,今天继续我的发博。
第二章 线性数据结构
2.1 基本概念
2.1.1 数据和数据结构
首先我要问,什么是数据结构?
答:数据结构就是计算机可以保存和处理的信息。
什么是数据元素?
答:组成数据的基本单位就是数据元素。
什么是数据结构?
答:数据结构就是研究数据与数据元素之间关系的一门学科。
数据结构的三方面内容
- 数据的逻辑结构
- 数据的存储结构
- 数据的运算
数据的逻辑结构
数据的逻辑结构就是数据元素之间的逻辑关系。可以用二元组表示其定义为Data-Structure=(D,R)。其中,D是组成数据元素的有限集合,R是数据元素之间的关系集合。
数据元素还可以分为俩大类,其分类及关系如下图
数据的存储结构
数据在存储器中的存储有四种基本的映像方法
- 顺序存储结构。这种存储方式主要用于线性数据结构,就是把数据元素按某种顺序放在一块连续的存储单元中。其特点是逻辑上相邻的数据元素存储在物理上相邻的存储单元中,元素之间的关系由存储单元的临近关系来体现。
某些非线性书记结构也采用顺序方式来存储,例如完全二叉树、多维数组等。 - 链式存储结构。链式存储结构可以把逻辑上相邻的俩个元素放在物理上不相邻的存储单元中。
链式存储结构的特点:一部分存放数据元素(称为数据域);另一部分存放指示存储地址的指针(称为指针域)。 - 索引存储结构。在线性表中,数据元素可以排成一个序列。
- 散列存储结构。
数据的运算
数据的运算是定义在数据逻辑结构上的操作,每种数据结构都有一个运算的集合。
常用的运算有检索、插入、删除、更新、排序等。
运算的具体实现要在存储结构上进行。
2.1.2算法的描述和评价
算法的五个重要特性:有穷性、确定性、可行性、输入、输出。
评价算法主要有俩个指标:
- 时间复杂度:在计算机上运行程序所消耗的时间。
- 空间复杂度:在计算机执行程序过程中所需要的最大存储空间。
确定实现算法在执行是所耗费的时间和所占用的存储空间的方法
- 直接测试(事后统计)
- 事前分析估算(常用)
对于第二种方法,分别对时间和空间进行讨论。
时间复杂度:
假定知道算法每一条语句执行一次所花的平均时间,则有:
算法运行所花的时间=语句执行一次所花的时间 * 语句执行次数
通常把语句执行频度作为衡量一个算法时间复杂度的依据。
算法时间复杂度记作:
T(n)=O(f(n))
常见的几种时间复杂度有:O(1),O(logn),O(n),O(nlogn),O(n2),O(n3),O(2n)等。
O(1)常量阶
O(n)线性阶
O(n2)平方阶
空间复杂度
一个算法的实现所占用的存储空间大致有这样三个方面:
- 指令、常数、变量所占用的存储空间;
- 输入数据所占用的存储空间;
- 算法执行时必须的辅助空间。
前两种是算法执行所必须的。因此
把算法执行时所需的辅助空间的大小作为分析算法空间复杂度的依据。
常见的几种空间复杂度有:O(1),O(n),O(n2),O(n3)等。