查找

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键值处开始,遍历所有链表,并输出各非空节点;

优点:通过把关键值映射到表中某个位置来记录和访问,以此加快查找的速度

posted @ 2018-05-26 00:47  Vevay  阅读(297)  评论(0编辑  收藏  举报