博客作业05--查找
1.学习总结
1.1查找的思维导图(各种查找的时间复杂度,ASL成功,不成功。都要体现。)
1.2 查找学习体会(谈谈你对查找算法学习体会。也可以谈谈STL容器中查找如何用的。)
- 查找在数据结构中占着很重要的地位,几乎每一个结构都要用到查找。查找是十分有用的操作。
- ASL是衡量一个查找算法效率优劣的标准。
- 时间复杂度对于查找代码也很重要。这章所学的查找结构的时间复杂度逐渐降低至O(1)。
- 要熟练掌握每个查找结构的定义,满足条件。另外还要熟练操作每个插入,删除步骤。并计算ASL。
- 查找的应用范围很广,对于很多问题都能有效解决。
2.PTA实验作业(不能选6-1,6-4)
2.1 题目1:6-2 是否二叉搜索树
2.2 设计思路(伪代码或流程图)
if(T为空树)返回正确
else if(左子树不为空但有键值大于其根结点的键值) 返回错误
else if(右子树不为空但有键值小于其根结点的键值) 返回错误
再次返回调用左子树和右子树
2.3 代码截图
2.4 PTA提交列表说明
对于问题没有考虑全面。
对于非空左子树的所有键值小于其根结点的键值,非空右子树的所有键值大于其根结点的键值。这两句一开始想的太简单。
2.1 题目2:6-3 二叉搜索树中的最近公共祖先
2.2 设计思路(伪代码或流程图)
if(T是空树) 返回error
if(查找不到u,v)返回error
if(u,v有一个是根节点)返回根节点的关键字
if(u,v一个在左子树,一个在右子树)返回根节点的关键字
if(都在右子树)继续调用,节点变成右节点
if(都在左子树)继续调用,节点变成左节点
2.3 代码截图
2.4 PTA提交列表说明
在Dev调好提交的。
2.1 题目3:7-1 QQ帐户的申请与登陆
2.2 设计思路(伪代码或流程图)
定义STL中的map类型QQ_N_L
申请map迭代器
输入类型,QQ号,密码
if(类型是新建)
{
在关联容器中查找
if(找到已存在的qq号)申请不成功
if(找不到)插入关联容器,申请成功
}
if(类型是登录)
{
在关联容器中查找
if(找到已存在的qq号)
{
if(密码不对)登录失败
else 登录成功
}
else 找不到
}
2.3 代码截图
2.4 PTA提交列表说明
看了老师发的有关map的博客,在Dev调好提交的。
3.截图本周题目集的PTA最后排名
3.1 PTA排名(截图带自己名字的排名)
3.2 我的总分:145
4. 阅读代码
数组实现哈希表在字符串操作程序中应用
定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符串中出现过的所有字符。例如,从第一个字符串“We are stduents”中删除在第二个字符串”aeio”中出现过的字符得到的结果时”W r stdnts”.
#include<iostream>
#include<string>
using namespace std;
string DeleteChar(const string &s1,const string &s2)
{
string Result;
bool hashTable[256]={0};
char ch;
for(size_t i=0;i<s2.size();i++)
{
ch=s2[i];
if(!hashTable[ch])
hashTable[ch]=1;
}
for(size_t i=0;i<s1.size();i++)
{
ch=s1[i];
if(!hashTable[ch])
Result.push_back(ch);
}
return Result;
}
string DeleteChar2(const string &s1,const string &s2)
{
string Result;
char ch;
for(size_t i=0;i<s1.size();i++)
{
ch=s1[i];
if(s2.find_first_of(ch)==string::npos)
Result.push_back(ch);
}
return Result;
}
int main()
{
string s1,s2;
getline(cin,s1);
getline(cin,s2);
cout<<DeleteChar(s1,s2)<<endl;
cout<<DeleteChar(s1,s2)<<endl;
}
采用哈希函数来解决字符串的常见问题,使用库函数让代码跟简洁。
思路:创建一个用数组实现的简单哈希表来存储第二个字符串,从头到尾扫描第一个字符串的每一个字符时,用O(1)时间判断该字符是不是在第二个字符中。