没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
991 真题知识点
线性表
线性表详解
注意:
1. 线性表是具有相同特性数据元素的一个有限序列。
2. 线性表在最后一个元素之后插入一个元素和删除第一个元素,则采用 不带头结点的有尾指针
的单循环链表 最省时间。
3. 静态链表中指示的是 链表中下一元素在数组的地址
4. 将两个有 n 个元素的有序表归并成一个有序表最少比较次数为 n 次,最多比较 2n-1 次 : 注意
有归并二字,即使用了归并算法,所以不存在两个有序表其中一个最大值小于另一个有序表最
小值的情况。
5. 在一个双链表中,在 p 结点之后插入 q 结点的操作,q->next=p->next;p->next-
>prior=q;p->next=q;q->prior=p。在 p 结点之前插入结点的操作,p->prior->next=q;q-
>next=p;p->prior=q,q->prior=q。
6. 非空的单循环链表 L 带头结点的终端结点(由 p 所指向)满足 p->next==L&&p!=L
7. 带头结点的双循环链表 L 为空的条件 L->prior==L&&L->next=L
8. 线性表是一个有限序列,可以为空
9. 线性表采用链式存储时,其结点地址 连续与否都可以
10. 静态链表插入和删除不移动元素
11. 顺序表查找元素只需要常数时间,是因为,顺序表只需要通过下标寻找
12. 若某表最常用的操作是在最后一个结点之后插入一个结点或删除一个结点,采用带头结点
的双循环列表最节省时间
13.
栈和队列
问题 1:铁路进行火车调度,当火车顺序按照 1,2,3,4,5,6 的 6 辆列车进站,请问出站
的可能顺序为多少种 1/n+1C(n/2n)(C 为组合数)=1/6+1 C(3/6)
问题 2:判断栈的操作序列是否合法,入栈操作为 I 出栈操作为 O
规则一:对于一个完整操作,操作 I 的次数最终等于操作 O 的次数,其次从序列开始到给定序
列任意位置,操作 O 的次数少于等于操作 I 的次数。
jugdeIO(){
int i=0;int I=0;int O=0;
while(ch[i]!='\0'){
if(ch[i]=='I')++I;if(ch[i]=='O')++O;if(O>I)RETURN 0;}
}if (I!=O)RETUEN 0;else return 1;
}
注意:
1. 如果一个栈输入序列为 1,2,3,4...n, 输出序列的第一个元素是 i,则第 i 个输出元素是 不
确定的
2. 若一个栈以向量 V[1,2,...n]存储,初始栈顶指针 top 为 n+1,则 x 进栈正确顺序为 top=top-
1;V[top]=x;
3. 两栈共享空间和共享栈可能会有区别
4. 循环队列,从头删从尾,插入 rear+,删除 head-
5. 设循环队列的下标范围是 0~n-1,其头,尾指针分别为 f 和 r,则其元素个数为 (r-f+n)
%n(要考虑 r 和 f 的大小)
6. 用带头结点的单链表表示队列在链表的链为 链尾和链中 (队头是头结点,不存储元素),
表示链队的队尾在链表的 链尾 位置
树 1
定义辨析(记住英文)
Full binary tree 完满二叉树:没有度为 1 的节点。
Perfect binary tree 完美二叉树:每一层的节点都是满的
Complete binary tree 完全二叉树:只有最后一层的节点可以不满,但要求最后一层的节点必
须从左到右填充(不可以跳位)。
二叉搜索树 / 二叉查找树:中序遍历“可以让结点有序”,为什么,因为二叉搜索树的结构就
很类似于中序遍历,最大特点是根结点的左孩子小于根结点,右孩子大于根结点。
哈夫曼编码
可以得到不等长但符合前缀特性的编码。哈夫曼编码考虑了词频率,需要用到前缀编码,按照
词频从大到小排序,一般来说词频越高的编码长度越短。
等长编码,即每个结点到根结点的路径长度相同。
基本术语:
树中一个结点的孩子个数称为该结点的度,树中结点最大的度数为树的度。结点的层次从树根
开始,在算法导论中为第 0 层为开始。
结点深度:自顶向下逐层叠加
结点高度:从叶节点开始自底向上逐层叠加
有序树和无序树:树中结点的各个子树从左到右是有次序的,不能交换
路径和路径长度:树中两个结点之间的路径是由两个结点之间所经过结点序列构成的
森林:m 颗不相交树构成的集合
树的性质:
(1) 树中的结点数等于所有结点的度数之和加 1
(2) 度为 m 的数中第 i 层上至多有 m^(i-1)
......
二叉树的性质:左 < 根 < 右结点
平衡二叉树:左子树和右子树深度之差不超过 1
二叉树的一些性质:
(1)非空二叉树叶结点等于度为 2 的结点数加 1,即 n0=n2+1。
(2)非空二叉树上第 k 层上至多有 2^(k-1)个结点
(3) 具有 n 个结点的完全二叉树高度为 log2(n+1)取上限或 log2n 取下限加 1
层次遍历:需要一个辅助队列,将二叉树根节点入队,根结点出队,若它有左子树,左子树根
节点入队;若有右子树,将右子树根节点入队,出队,出队,访问出队结点。重复此过程。
线索二叉树: 结构 lchild ltag data rchild rtag,引入线索二叉树的目的是,加快查找结点前
驱和后继的速度。ltag=0 为 lchild 域指示结点的左孩子,ltag=1 为 rchild 域指示结点的前驱。
线索化:pre 和 p,pre 表示 p 的前驱结点,p 为 pre 的后继。
存储
二叉树(堆)的数组存储:根据树高,以对应的高度的 Perfect binary tree 来存。
数的定义:
树是 n 个结点的有限集,当 n=0,是一颗空树,在任意一棵非空树中应满足:1)有且仅
有一个结点被称为根节点。2)当 n>1, 其余结点可分为 m 个互不相交的有限集合,其中每个集
合又都是一颗树,并且称为根的子树。
显然,树的定义是递归的,即在树的定义中用到了自身,树作为一种逻辑结构,同时也是
一种分层结构,有以下的特点: 1)树的根节点没有前驱,除根节点外所有结点有且仅有一个
前驱。 2)树中所有结点都可以有零个或多个后继。
树的存储结构:
双亲表示法:用一组连续空间进行存储,增加一个伪指针,指示双亲在数组中的位置。
在找双亲时容易但在找孩子结点需要遍历整个结构
剩余23页未读,继续阅读
资源评论
白光白光
- 粉丝: 539
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功