1.学习总结
1.1查找的思维导图
1.2查找学习体会
学习折半查找觉得比较难理解的就是B树和平衡调整,这玩意儿到现在还没理解透彻,树上的例题倒是了解其意,但让我敲代码的话一时半会憋不出来;其中查找如顺序查找和折半查找都是上学期有接触过的,比较简单。哈希表是查找这章我觉得比较新颖的数据结构,存储数据的方式和之前学习的完全不一样,哈希表能够大大节省空间。
2.PTA实验作业
2.1题目一:6-2是否为二叉搜索树
2.1.1设计思路
定义一个静态局部数组a存放数据
if(T为空)
树T不是二叉搜索树
else
将树的每个结点按中序遍历存进数组中,相邻元素依次比较,如果为递增序列,则为二叉搜索树
2.1.2代码截图
2.1.3PTA提交列表
2.2题目二:7-1QQ帐户的申请与登陆
2.2.1设计思路
申请STL容器<string,int>QQ1,<string,string>QQ2存放用户信息
定义string类型QQhm和QQmm存放用户账号和密码
while(n--)
输入申请或者登陆指令、号码和密码
if(登陆老账户)
如果老账户不存在,输出ERROR:Not Exist
else
if(输入的账号和密码不匹配)
输出ERROR:Wrong PW
else
输出Login:OK
if(新账户申请)
if(输入的账号存在)
输出ERROR:Exist
else
将账号和密码信息存进容器QQ1,便于后面用容器QQ2检测
2.2.2代码截图
2.2.3PTA提交列表
输入和输出用scanf和printf即可,用cin和cout会超时
2.3题目三:7-2航空公司VIP客户查询
2.3.1设计思路
定义STL容器huiyuan存放用户信息
定义整型n、k分别存放用户个数和最低航程k
定义整型km存放用户航程和号码
whilie(n--)
输入用户账号和航程
if(用户航程小于初始航程)
用户航程等于初始航程
用huiyuan存储用户信息
输入要查询人的个数m
while(m--)
输入会员号码
if(会员号码不存在)
输出Not Info
else
输出会员行程
2.3.2代码截图
2.3.3PTA提交列表
输入和输出用scanf和printf即可解决运行超时的问题
3.截图本周PTA最后排名
3.1PTA排名
3.2我的总分
145
4.阅读代码
STL容器map的构造
private:
//将红黑树重命名
typedef rb_tree<key_type, value_type,
select1st<value_type>, key_compare, Alloc> rep_type;
rep_type t; // red-black tree representing map
public:
//再对类型重命名
typedef typename rep_type::pointer pointer;
typedef typename rep_type::const_pointer const_pointer;
typedef typename rep_type::reference reference;
typedef typename rep_type::const_reference const_reference;
typedef typename rep_type::iterator iterator;
typedef typename rep_type::const_iterator const_iterator;
typedef typename rep_type::reverse_iterator reverse_iterator;
typedef typename rep_type::const_reverse_iterator const_reverse_iterator;
typedef typename rep_type::size_type size_type;
typedef typename rep_type::difference_type difference_type;
template <class T1, class T2>
struct pair {
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair() : first(T1()), second(T2()) {}
pair(const T1& a, const T2& b) : first(a), second(b) {}
#ifdef __STL_MEMBER_TEMPLATES
template <class U1, class U2>
pair(const pair<U1, U2>& p) : first(p.first), second(p.second) {}
#endif
};
map是以红黑树RB_Tree为底层机制的关联式容器。map的每一个元素都拥有两个值,一个键值(key)和一个实值(value)。它的内部实现是用一个pair来保存这个两个值。所以,map的每一个元素又是一个pair(个人觉得像vector,一个一个的键值对应一个实值相当于vector数组里的每一个下标对应每一个数据)。因为map底部是一棵红黑树,拥有自动排序功能,里面每个键值都是按顺序排列好的,这点限制了我们不能改变里面的简直顺序,否则会破坏map的组织结构
其中stl_map.h中会有这样一句话
typedef pair<const Key, T> value_type;
他将pair定义成value_type,同时将pair的key声明成const类型,限制了不能随便修改它