C++数据结构知识点整理

数据元素是数据的基本单位
数据项是数据的最小单位
数据元素是讨论数据涉及的最小数据
数据结构的存储主要有:(顺序存储结构,链接存储结构)。存储两个内容: 数据元素数据元素之间的关系
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 算法求最小生成树的时间复杂度为(    )。
【解答】 ( n2 ), ( 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)

你可能感兴趣的:(DataStructure,h)