博客作业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)时间判断该字符是不是在第二个字符中。

5. 代码Git提交记录截图

posted @ 2018-05-26 21:11  yawlc  阅读(217)  评论(1编辑  收藏  举报