考研复试面试准备——数据结构篇

第1章——绪论

数据结构的三要素

img

什么是抽象数据类型

一些数据对象以及附加在这些数据对象上的集合的操作

第2章——线性表

尾插法、头插法建立单链表

尾插法建立单链表,n个元素存储在数组a中

void createListR(LNode *&C,int a[],int n){
	LNode *r,*s;
	C=(LNode*)malloc(sizeof(LNode));
	C->next=NULL;
	r=C;
	for(int i=0;i<n;i++){
		s=(LNode*)malloc(sizeof(LNode));
		s->val=a[i];
		r->next=s;
		r=r->next;
	}
	r->next=NULL;
}

头插法

void createListF(LNode *&C,int a[],int n){
	LNode *s;
	C=(LNode*)malloc(sizeof(LNode));
	C->next=NULL;
	for(int i=0;i<n;i++){
		s=(LNode*)malloc(sizeof(LNode));
		s->val=a[i];
		s->next=C->next;
		C->next=s;
	}
}

栈和队列的区别

栈:只能在一端进行插入或删除操作的线性表

队列:操作受限的线性表,仅允许一端插入,另一端删除

第5章——数组、矩阵与广义表

稀疏矩阵如何存储

三元组、伪地址表示法(邻接表、十字链表)

第6章——树与二叉树

给定n个结点,能构造多少中不同的二叉树

Catlan函数:$ h(n)=\frac{C_{2n}^{n}}{n+1}$

树的相关概念

  1. 满二叉树:除了最后一层外,其他结点都有两棵子树
  2. 完全二叉树:除了最后一层外,其他任何一层的结点数都达到最大值,且最后一层只在右侧缺少结点
  3. 平衡二叉树:任何一个结点的左右子树高度不超过1

第7章——图

最小生成树和最短路径

  1. 迪杰斯特拉算法:求单源最短路径,边的权值不能为负
  2. 弗洛伊德算法:求任意顶点之间的最短路径
  3. 普里姆算法:无向图,稠密图
  4. 克鲁斯卡尔算法:无向图、稀疏图、并查集

第8章——排序

各种排序算法的性能

  1. 时间复杂度

    快些归队:\(n\log_{2}n\),其他:\(n^{2}\)

  2. 空间复杂度

    快排:logn,归并:n,基数:r(关键字基的个数),其他都是1

  3. 算法稳定性

    不稳定:快些选一堆

第9章——查找

B树和B+树

B树,又称多路平衡查找树, B 树中所有结点的孩子个数的最大值称为B 树的阶,通常用m 表示。一棵m 阶B 树或为空树,或为满足如下特性的m 叉树:

  1. 树中每个结点至多有m 棵子树,即至多含有m-1 个关键字。
  2. 若根结点不是终端结点,则至少有两棵子树。
  3. 除根结点外的所有非叶结点至少有「m/2] 棵子树,即至少含有「m/2]- 1 个关键字。
  4. 所有的叶结点都出现在同一层次上,并且不带信息(可以视为外部结点或类似千折半查找判定 树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空)。

B 树是所有结点的平衡因子均等于0 的多路平衡查找树。

B+树是应数据库所需而出现的一种B 树的变形树。
一棵m 阶的B+树需满足下列条件:

  1. 每个分支结点最多有m 棵子树(孩子结点)。
  2. 非叶根结点至少有两棵子树,其他每个分支结点至少有「m/2]棵子树。
  3. 结点的子树个数与关键字个数相等。
  4. 所有叶结点包含全部关键字及指向相应记录的指针,叶结点中将关键字按大小顺序排列, 并且相邻叶结点按大小顺序相互链接起来。
  5. 所有分支结点(可视为索引的索引)中仅包含它的各个子结点(即下一级的索引块)中 关键字的最大值及指向其子结点的指针。
posted @ 2020-04-25 10:44  咸鱼不闲咋整啊  阅读(1721)  评论(0编辑  收藏  举报