博客作业05--查找
1.学习总结
1.1查找的思维导图
1.2 查找学习体会
查找的内容比较多,类型也比较多,一个题的解法就很多,如果学会一些能直接调用的函数(如map)的用法,解题效率会大大提高,思路也更广。
2.PTA实验作业
2.1 题目1:是否二叉搜索树
2.2 设计思路(伪代码或流程图)
中序遍历树,并保存前驱节点至prev中
根据中序遍历是递增的有序列做
如果当前结点小于前驱结点则不是二叉搜索树 返回false
否则是二叉搜索树 返回true
2.3 代码截图
2.4 PTA提交列表说明。
2.1 题目2:二叉搜索树中的最近公共祖先
2.2 设计思路(伪代码或流程图)
判断u,v是否在树内 不在返回error
否则继续操作
若u,v有一个在根上 则返回当前根结点
若u,v不在同一边树上,则返回当前根结点
若u,v都在同一边树上,递归调用LCA,直到找到共同祖先
2.3 代码截图
2.4 PTA提交列表说明。
2.1 题目3:航空公司VIP客户查询
2.2 设计思路(伪代码或流程图)
定义map<string,int>P
输入n和k
while(n--)
用name来存身份证号码 len存飞行里程
输入 身份证号码和飞行里程
存入P[name]中
输入身份证查找乘客
存在输出飞行里程
否则输出NO info
2.3 代码截图
2.4 PTA提交列表说明。
3.截图本周题目集的PTA最后排名
3.1 PTA排名
3.2 我的总分:145
4. 阅读代码
#include <map>
struct Test_input_iterator_tag //数据类型,Move函数中做为参数的原型的基类
{ // identifying tag for input iterators
};
struct Test_output_iterator_tag
{ // identifying tag for output iterators
};
struct Test_forward_iterator_tag
: public Test_input_iterator_tag, Test_output_iterator_tag
{ // identifying tag for Test_forward iterators
};
struct Test_bidirectional_iterator_tag
: public Test_forward_iterator_tag
{ // identifying tag for bidirectional iterators
};
struct Test_random_access_iterator_tag
: public Test_bidirectional_iterator_tag
{ // identifying tag for random-access iterators
};
struct Test_Int_iterator_tag
{ // identifying tag for integer types, not an iterator
};
// POINTER ITERATOR TAGS
struct Test_Nonscalar_ptr_iterator_tag
{ // pointer to unknown type
};
struct Test_Scalar_ptr_iterator_tag
{ // pointer to scalar type
};
template<typename _Tp>
class Test_new_allocator//Linux源码中做为内存分配的基类,在本代码中没有实际用途
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
template<typename _Tp1>
struct Test_rebind
{ typedef Test_new_allocator<_Tp1> other; };
pointer Test_allocator(int size,const void* = 0)
{
return new (size * sizeof(_Tp));
}
void
deallocate(pointer __p, size_type)
{
::operator delete(__p);
}
};
总体来说Windows系统Map与Linux系统Map采用了相同的实现思路,只是实现细节有点较小的差异。
同样采用相同的数据结构红黑树做为Map内核链表绑定数据的存储路线(代码内部有Window、Linux系统红黑树相关的实现)。
Map主要分为两大模块调用:
1.Map类:
键值数据的管理以及传送给Tree_node对应的红黑树的节点。
2.Tree_node(节点类):
地址:https://blog.csdn.net/a29562268/article/details/54604572