1.学习总结(2分)
1.1查找的思维导图
1.2 查找学习体会
- 查找有很多方法,感觉知识点挺多挺乱挺杂,B—和B+树的插入和删除操作,平衡二叉树的调整,删除都挺容易混乱的,哈希表的查找及其他代码的操作
- 知识点挺紧凑,画图操作性的东西很多,map函数的使用自己还是一知半解,ASL的计算方式在不同的查找方法下都挺不同的,需要好好去区分消化
map是STL的一个关联容器,它提供一对一的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,map的很多用法都和STL中其它的东西结合在一起,比如在排序上,这里默认用的是小于号,map中由于它内部有序,由红黑树保证,因此很多函数执行的时间复杂度都是log2N
STL 容器的查找函数:https://blog.csdn.net/u014260855/article/details/38125295
2.PTA实验作业(4分)
2.1 题目1:6-2 是否二叉搜索树
2.2 设计思路(伪代码或流程图)
bool IsBST ( BinTree T ){ 空树返回真 定义静态变量 min=-32768; (中序遍历:) 递归左子树 if(左子树上的数比根结点小) 把T->data的值赋给min 否则返回false 递归右子树 返回true }
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
编译错误自己的编写有括号出错
部分正确
自己没有定义静态变量min,这样每次递归比较时min是不变的,根据讲解定义静态变量后才正确
2.5 题目2:6-3 二叉搜索树中的最近公共祖先
2.6 设计思路(伪代码或流程图)
int LCA( Tree T, int u, int v ){ 空树或者有元素不在树时直接返回error 其中有一个在根上,直接返回该根结点值 一个在左子树一个在右子树时,返回该树根结点 都在右子树上 return LCA(T->Right,u,v); 都在左子树上 return LCA(T->Left,u,v); }int find(Tree T,int number){ 空树返回0 找到返回1 在左子树上 return find(T->Left,number); 在右子树上 return find(T->Right,number);}
2.7 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.8 PTA提交列表说明。
部分正确
都在左子树上与都在右子树上书写错误,自己原先写
应改为
2.9 题目3:7-1 QQ帐户的申请与登陆
2.10 设计思路(伪代码或流程图)
#includeusing namespace std;#include
2.11 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.12 PTA提交列表说明。
编译错误
自己C与C++语言的问题
一开始感觉挺麻烦挺没思路的,在老师介绍Map后感觉确实代码量会少,不过自己对map的使用还是很懵懂啊
自己一开始用C写都提示有些东西找不到,之后换成c++的头文件就可以,感觉#include 需要在C++的头文件里运行比较方便找到
3.截图本周题目集的PTA最后排名(3分)
本次题目集总分:175分
必做题共:145分3.1 PTA排名(截图带自己名字的排名)
3.2 我的总分:145
本题评分规则:
(1)2个题目集PTA总分145--175分:3分(全部题目都做)
(2)PTA总分在120分--145分:2.5分(必做题全部做完,选做题做部分) (3)PTA总分在105--120分:2分(必做题大部分做完) (4)PTA总分在80--105分:1.5分 (5)PTA总分在45分-80分:1分 (6)PTA总分在45分以下:0分4. 阅读代码(必做,1分)
本次为必做
/**@brief rbt_left_rotate*@param[in] T 树根*@param[in] x 要进行旋转的节点*/void rbt_left_rotate( rbt_root_t* T, rbt_t* x){ rbt_t* y = x->right; x->right = y->left; if(x->right != T->nil)//更新某结点的父亲时,要确定此结点不是T.nil x->right->p = x; y->p = x->p; if(x->p == T->nil){//如果x以前是树根,那么现在树根易主了 T->root = y; }else if(y->key < y->p->key) y->p->left = y; else y->p->right = y; y->left = x; x->p = y;}/**@brief rbt_right_rotate*@param[in] 树根*@param[in] 要进行旋转的节点*/void rbt_right_rotate( rbt_root_t* T, rbt_t* x){ rbt_t * y = x->left; x->left = y->right; if(T->nil != x->left) x->left->p = x; y->p = x->p; if(y->p == T->nil) T->root = y; else if(y->key < y->p->key) y->p->left= y; else y->p->right = y; y->right = x; x->p = y;}
- 这是红黑树旋转代码
- 代码优点:该代码对结点中指针结构的改变很巧妙熟练,对各类指针地址的改变,确定思路清晰,该旋转的时间复杂度只有O(1),体现了运用红黑树的效率高
- 代码链接:红黑树:https://blog.csdn.net/weewqrer/article/details/51866488
- 代码链接:哈希表及其常用算法(代码实现):https://blog.csdn.net/wangxu_zju_2010/article/details/7489548
- 代码优点:这两博文较详细的列举了红黑树与哈希表的基本操作代码,有图文解释很清晰明了