博客作业05--查找
1.学习总结(2分)
1.1查找的思维导图
1.2 查找学习体会
查找有顺序查找,二分查找和分块查找。顺序查找的优点是算法简单,对表的结构无任何要求,但是查找效率低。二分查找是一种效率较高的方法,但是要将表按关键字排序,只适用顺序存储结构。哈希表的平均查找长度是α的函数,而不是n的函数,用哈希表构造查找表时,可以选择适当的装填因子α,使得平均查找长度在某个范围内。
2.PTA实验作业(4分)
2.1 题目1:6-2 是否二叉搜索树
2.2 设计思路
静态定义 min = -32768
如果树空 返回true
递归调用左孩子 如果根节点比min大 把它赋值给min
否则 返回false
递归调用右孩子
返回true
end
2.3 代码截图
2.4 PTA提交列表说明。
2.1 题目2:6-3 二叉搜索树中的最近公共祖先
2.2 设计思路
如果树空 返回ERROR
如果u,v不在树中 返回ERROR
如果u,v在根上 返回key
如果u,v一个在左子树,一个在右子树 返回key
如果u,v都在左子树 返回左递归结果
如果u,v都在右子树 返回右递归结果
end
2.3 代码截图
2.4 PTA提交列表说明。
刚开始的时候没有调用find函数 ,一直在左右孩子的判断条件里修改,后来同学告诉我需要加一个查找函数,这才正确
2.1 题目3:7-1 QQ帐户的申请与登陆
2.2 设计思路
int n
string choose qq_num qq_password
输入n行命令
while n--
输入choose qq_num qq_password
if choose等于L
if QQ号不存在 输出ERROR: Not Exist
else
if QQ号与密码不匹配 输出"ERROR: Wrong PW"
else 输出"Login: OK"
if choose 等于 N
if QQ号已存在 输出"ERROR: Exist"
else
申请新账户 并且密码匹配 输出"New: OK"
end
2.3 代码截图
2.4 PTA提交列表说明。
在选择新老账户的时候我只choose了L,后面用else代替了choose=N,导致答案错误
3.截图本周题目集的PTA最后排名(3分)
3.1 PTA排名
3.2 我的总分:130
4. 阅读代码
作为STL的最主要组成部分--容器,分为向量(vector),双端队列(deque),表(list),队列(queue),堆栈(stack),集合(set),多重集合(multiset),映射(map),多重映射(multimap)。
容器
所在头文件
向量<vector>
双端队列<deque>
表<list>
队列<queue>
堆栈<stack>
集合<set>
映射<map>
算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。<algorithm>是所有STL头文件中最大的一个
迭代器功能(Abilities Of Iterator Gategories)
输入迭代器
Input iterator
向前读
Reads forward
istream
输出迭代器
Output iterator
向前写
Writes forward
ostream,inserter
前向迭代器
Forward iterator
向前读写
Read and Writes forward
双向迭代器
Bidirectional iterator
向前向后读写
Read and Writes forward and
backward
list,set,multiset,map,mul
timap
随机迭代器
Random access iterator
随机读写
Read and Write with random
access
vector,deque,array,string
#include <string>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
class CStudent
{
public :
int nStudentID;
int nAge;
public :
//缺省构造函数——通常为空
CStudent() { }
// 完整的构造函数
CStudent(int nSID, int nA) { nStudentID=nSID; nAge=nA; }
//拷贝构造函数
CStudent(const CStudent& ob)
{
nStudentID=ob.nStudentID; nAge=ob.nAge;
}
// 重载“=”
void operator = (const CStudent& ob)
{
nStudentID=ob.nStudentID; nAge=ob.nAge;
}
};
int main(int argc, char* argv[])
{
map <string, CStudent> mapStudent;
mapStudent["Joe Lennon"] = CStudent(103547, 22);
mapStudent["Phil McCartney"] = CStudent(100723, 22);
mapStudent["Raoul Starr"] = CStudent(107350, 24);
mapStudent["Gordon Hamilton"] = CStudent(102330, 22);
// 通过姓名来访问Cstudent类中的成员
cout << "The Student number for Joe Lennon is " <<
(mapStudent["Joe Lennon"].nStudentID) << endl;
return 0;
}