数据元素是数据的基本单位
数据项是数据的最小单位
数据元素是讨论数据涉及的最小数据
数据结构的存储主要有:(顺序存储结构,链接存储结构)。存储两个内容:
数据元素和
数据元素之间的关系
0或多个输入,一个或多个输出,有穷性,确定性,可行性为数据结构的五个特征
算法描述通常有
自然语言,程序设计语言,流程图,伪代码。算法语言是
伪代码。
时间复杂度--
问题规模的函数
数据元素的逻辑关系由
存储位置表示的,链接数据元素间逻辑关系的是
指针
使用
抽象数据类型定义一个完整的数据结构
算法分析的目的是
分析算法的效率以求改进
算法分析的连个主要的方面是
空间性能和
时间性能
算法的时间复杂度是由算法的
数量级来衡量的
线性表
运算定义在
逻辑结构,运算的具体实现在
存储结构上的
确定了线性表存储的起始位置,线性表任意一个元素都可随机存取,
顺序表是
随机存取结构
置空表 InitList(L) 构造一个空的线性表
求表长ListLength(L)求L中的节点个数
GetNode (L,i)取L中的第i个元素
顺序表存储方法:
把线性表按逻辑次序依次放入一组存储单元中
顺序表(Sequential List)
插入:O(n)平均移动(n/2)
删除:O(n)平均移动(n-1)/2
a、顺序表和b、链表的比较:
时间性能:a:线性表--经常性地查找、b:链式存储结构--经常性的插入删除操作
空间性能:a: 对数据量的大小事先能够知道的用线性表,b、数据量变化大的用链式存储
存储密度越大,空间利用率越高,顺序表的存储密度是1,链表的密度小于1
栈和队列
栈--
后进先出的线性表,LIFO表(运算受限的线性表,顺序栈也是用数组表示)
进栈操作:S->top +1 ①S->top== StackSize -1 表示栈满②上溢现象:当栈满了之后,再进栈运算产生空间溢出
退栈操作:S->top -1 ①S->top 表示空栈②空栈:栈空再操作、
栈顶指针就是链表头指针
允许删除的一端--
队头(Front)
允许插入的一端--
队尾(Rear)
队列亦作
先进先出 的线性表 FIFO表
顺序队列是一个受限制的线性表
1.入队 新元素插入rear 所指位置 rear+1
2.出队 删去front所指元素 front+1
3.当头尾指针相等时,队列为空
4.非空队列头指针始终指向队尾元素的下一位置,而队尾指针始终指向队尾元素的下一位置。
栈顶指针指向栈顶元素。
循环队列
上界:(QueueSize)
多维数组和字符串
数组存储结构与寻址
行序为主序(row major order)
行优先 C++
LOC(a
ij)=LOC(a
l1l2)+((i-l
1)*(h
2-l
2+1)+(j-l
2))*c
矩阵压缩与存储
压缩存储的基本思想是:多个相同值分配一个存储空间、0不分配空间
对称矩阵的压缩
下三角: k = i*(i-1) / 2 + j - 1
上三角: k= j*(j-1) / 2 + i - 1
三角矩阵的压缩
下三角:k = { i*(i-1) / 2 + j - 1 ;i<=j
k = { n*(n+1)/2 ;i>j
下三角:k = { (i-1)*(2n-i+2) / 2+ j-i ;i
k = { n*(n+1)/2 ;i>j
稀疏矩阵的压缩存储
row//行号,col//列号,item//非零元素数值
树与二叉树
二叉树
i层结点数目2^(i-1)
k深度结点数目2^k - 1
只知道前序和后续,不能唯一确定一棵二叉树
树的前序遍历<==>二叉树的前序遍历
树的后序遍历<==>二叉树的中序遍历
森林的遍历方式:前序遍历,后序遍历
图
顶点的度总和 = 边数 * 2
出、入度 = 边数
对于含有
n
个顶点
e
条边的连通图,利用Prim
算法求最小生成树的时间复杂度为(
),利用Kruskal
算法求最小生成树的时间复杂度为(
)。
【解答】
O
(
n2
),
O
(
elog2
e
)
查找技术
顺序查找:
ASL = O(n) -->n-i+1 次比较
折半查找:
关键码有序存储,必须采用顺序存储。只能应用于静态查找。
ASL =
O
(log
2
n)
二叉排序树
若s-> data 小于 root ->data , 则把结点s插入root的左子树
平衡二叉树
1.根节点的左子树和右子数深度最多相差1
2.根结点的左右子树也都是平衡二叉树
邻接表
邻接的是顶点序号
最小生成树无环
有向图 序号+权值
kruscal 无环 权值从小到大排序。
prime 任意取一顶点 从最小的权值开始寻找连接
最小权值边 无环
排序
直接插入 是一个稳定的排序方法
时间复杂度是O(n^2)
希尔排序 是一个不稳定的排序方法
时间复杂度是O(n^1.3)
起泡排序是一种稳定的排序方法
时间复杂度为O(n)~O(n^2)
快速排序是一种不稳定的排序方式
时间复杂度平均O(log n)~O (n^2)