查找
1.学习总结
1.1查找的思维导图
1.2查找的学习体会
查找是很实用的一种操作,在计算机中应用很广,查找也有内查找和外查找之分,查找的主是关键字的比较,计算ASL(平均查找长度)是衡量查找效率的标准。查找和线性表也有联系,包括顺序查找、折半查找、索引查找和分块查找。应用较多的是创建二叉排序树进行查找、平衡二叉树及其调整还有B树。
困难:查找有很多种方法,以及还包括树的内容,方法太多,所以做的时候很容易混乱,一下子写不出来。平衡二叉树的调整容易混乱
解决的问题:二叉排序树,二叉平衡树,B树,哈希函数
2.PTA实验作业
2.1题目一:是否为二叉树
2.2设计思路:
定义变量T表示要判断的树
算法开始
IF T==NULL 则 返回true
IF T->left!=NULL 且 !IsMax(T->Left, T->Data) 则返回 false
IF T->Right!=NULL 且 !IsMin(T->Right , T->Data) 则返回 false
否则 返回 IsBST(T->Left) 和 IsBST(T->Right)
End 算法结束
2.3代码截图:
2.4PTA提交列表截图:
一开始想到什么就把想到的内容写了出来,没有注意一些基本的格式就提交上去,导致编译错误
2.2题目二:二叉搜索树中的最近公共祖先
2.2设计思路:
定义变量T表示树结构,变量u,v表示其后代的深度最大的结点
find 函数计算 算法开始
IF T=NULL 返回 0
IF T->Key==u 返回 1
IF T->Key<u 返回 find(T->Right,u);
IF T->Key>u) 返回 find(T->Left,u);
END 算法结束
LCA 函数 算法开始
IF T==NULL 返回 ERROR
IF !find(T,u) 或者 !find(T,v) 返回 ERROR
IF u==T->Key 或者 v==T->Key 返回 T->Key;
IF u>T->Key 且 v<T->Key 或者 u<T->Key且 v>T->Key 返回 T->Key;
IF u>T->Key 返回 LCA(T->Right,u,v);
IF u<T->Key 返回 LCA(T->Left,u,v);
END 算法结束
2.3代码截图:
2.4PTA提交列表截图:
自己尝试的写了几次一直编译出错,在Dev可以运行,实在找不出错误百度了这道题,之后理解了
2.3题目三:航空公司VIP客户查询
2.2设计思路:
定义变量h表示树结构,变量flag表示判断乘客是否为vip的结果
为树结构的temp申请空间
IF h==NULL,将其数据域mile赋给K并将其左右子树置NULL,然后返回temp
否则 将num和ch 比较
IF flag==0,h->mile+=K
IF flag>0,h->Left=Insert(h->Left,ch,K)
否则 h->Right=Insert(h->Right,ch,K);
算法结束,返回h
2.3代码截图:
2.4PTA提交列表截图:
在pta提交前先在Dev上编译过,编译错误的原因在于写到pta上有进行变量的修改,有的变量在函数中修改之后没有重新定义而导致的
3.截图本周PTA题目集的最终排名
3.1PTA排名
3.2最终得分
110分
4.阅读代码
部分代码截图
功能:利用哈希表查找并统计一篇文章中单词的词频,
构造一个结构体数组 struct node_t 称为哈希表
构造一个哈希函数,给定一个 字符串 返回一个整数,这个整数哈希表的键值;
每获取一个字符串,把字符串 与 它的所对应键值的node 节点为表头的链表上的所有单词比较,若存在相同的,count++,否则增加到链表节点,把单词挂到该节点上,并置count=1;
输出的时候,从哈希表的0键值处开始,遍历所有链表,并输出各非空节点;
优点:通过把关键值映射到表中某个位置来记录和访问,以此加快查找的速度