No title
绪论
算法+数据结构=程序
程序设计语言 识字
数据结构 写小作文
算法设计与分析 写大文章
第一章
数据:
对信息的符号表示
数据和计算机没有必然的联系
数据元素
能描述完整信息的数据的基本单位(DataFrame中的一列)
数据项:
最小单位,例如学号,姓名
数据对象:
相同性质的若干个数据元素的集合
一个班所有的学号(DataFrame中的行)
数据元素之间存在关系,则称为数据结构
分析 设计 编码实现
逻辑结构(与计算机无关) 相对于物理结构(存储结构)
1.表格
2.二元组
B = (D,R)
<x,y> 固定前后顺序
3.图形
逻辑结构类型
1.集合
2.线性结构
3.树形结构
4.图结构
存储结构
关系
1.顺序映象
存储位置的相邻表示逻辑的相邻
2.链式映象
以附加信息(指针)表示后继关系
3.数据类型
Fortran和C的二维数组行和列存储的时候是反的
4.抽象数据类型
抽象数据类型 = 逻辑结构 + 抽象运算
过程
问题描述
设计存储结构
算法设计
算法分析
编码实现
算法
为了解决某类问题而规定的一个有限长的操作序列
五个重要特性
有穷性
确定性
可行性
有输入
有输出
原则
正确性
可读性
健壮性
高效率低存储量
时间
如何表示算法运行时间
不用绝对时间
对于特定输入,算法基本操作的执行次数
独立于具体的机器
算法执行时间的增长率和f(n)的增长率相同
T(n) = O(f(n))
最坏情况运行时间更有意义
增长的量级
只考虑最高次项
冒泡
n(n-1)/2
空间
S(n) = O(g(n))
原地工作
额外空间相对于输入数据量来说是个常量
比如冒泡 复杂度是1
第二章 线性表
线性表是一个具有相同特性的数据元素的有限序列
ADT
引用型操作
加工型操作
顺序存储
以存储位置相邻表示逻辑相邻
所有数据元素的存储位置均取决于第一个数据元素的存储位置
typedef struct{
ElemType *elem; 指向0号地址
int length;
int listsize;
}SqList;
单链表
头指针–>头节点–>a1……an->空
Typedef struct LNode{
ElemType data;
struct LNode * next
}LinkList;
顺序存取
双链表
多了个指向前一个的指针
Typedef struct DuLNode{
ElemType data;
struct LNode * prior;
struct LNode * next;
}DuLinkList;
循环链表
连表是一种动态分配空间的存储结构,能更有效地利用存储空间
插入或删除元素时不需要移动元素
由于链表是”顺序存取“随机存取元素和在表尾插入等操作带来不便
第三章 栈和队列
操作只能搞尾部