数据结构笔记(持续更新中)
第一章 绪论
数据结构基本概念
- 基本概念和术语
数据 :信息的载体,描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
数据对象:具有相同性质的数据元素的集合,是数据的一个子集。
数据元素:数据的基本单位,通常做为一个整体进行考虑和处理。
数据项:构成数据元素的不可分割的最小单位。
数据类型(集合+操作) |
---|
原子类型 ------------ 结构类型 ------------- 抽象数据类型ADT |
值的集合+操作 -------- 结构的集合+操作 ---------- 数据对象+数据关系+操作 |
数据不是孤立存在的,他们之间存在着某种关系,这种相互关系我们叫结构。
数据结构:相互存在一种多多种特定关系的数据元素的集合。
2. 数据结构三要素*
逻辑结构
逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。
- 集合结构中的数据元素之间除了 “同属于一个集合”的关系外,别无其他关系。
- 图状结构或网状结构结构中的数据元素之间存在多对多的关系。
- 线性结构结构中的数据元素之间只存在一对一的关系。
- 树形结构结构中的数据元素之间存在一对多的关系。
物理结构
存储结构(顺序存储、链式存储、索引存储、散列存储)
数据运算
运算包括运算的定义和实现,运算的定义针对逻辑结构,运算实现针对存储结构
算法和算法评价
- 算法基本概念
算法:对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。
五大特性:确定性、有穷性、可行性、输入、输出
算法与程序:
算法是解决问题的过程
程序是某种程序设计语言对算法的具体体现
区别:
算法必须有穷,程序可以无穷
算法必须正确,程序可以错误
算法可以用伪代码,程序语言描述,程序只能用编程语言编写并编译运行 - 算法效率度量
“好”算法:正确、可读、健壮、效率与储存量
时间复杂度
语句频度:语句可重复执行次数
T(n):所有语句之和,n为问题的规模
int sum = 0;
for (int i = 1;i <= n;i++)
sum += i;
//语句频度是n
//T(n) = 1 + n
//O(f(n)) = 1
时间复杂度T(n) = O(f(n)) O表示T(n)与f(n)在n->正无穷时为同阶无穷大
最坏时间复杂度(实际意义)、最好时间复杂度、平均时间复杂度、
基本运算频度来分析算法时间复杂度
空间复杂度
算法消耗的存储空间,记S(n) = O(g(n))
除本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储为实现算法所需一些信息的辅助空间。
算法原地工作时算法所需的辅助空间为常量,O(1)
第二章 线性表
线性表的定义和基本操作
线性表的定义
线性表是具有相同类型的n(n>0)个元素的有限序列,其中n为表长,当n=0时,该表为空表。
L命名为线性表,一般表示为:L = (a1,a2,…,ai,ai+1,…,an)
特点:
- 表中数据个数有限
- 逻辑上的顺序性,在序列中的各个元素排序有其先后次序
- 表中元素都是数据元素,每个元素都是单个元素
- 表中元素的数据类型相同,这意味着每一个占相同的储存空间
- 表中元素具有抽象性,即讨论的元素间一对一的逻辑关系,而不考虑元素究竟表示的内容
- 逻辑结构,表示元素间一对一相邻
线性表的九种基本操作
- InitList(&L) 初始化表,构造空表
- DestroyList(&L) 销毁操作,销毁线性表,释放空间
- LocateElem(L,e) 按值查找,在表L查找具有给定关键字的元素
- GetElem(L,i) 按位查找,获取表L中的第i个位置的元素值(i在表长范围内)
- ListInsert(&L,i,e) 插入操作,在第i个元素之前插入指定元素
- ListDelete(&L,i,&e) 删除操作,删除表中第i个位置的元素,并用e返回删除元素的值
- PrintList(L) 输出操作,按前后顺序输出L所有元素的值
- Empty(L) 判空,为空返回TRUE,否则返回FALSE
- Length(L) 求表长,返回L元素个数