眉梢眼角藏欢

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.本周学习总结(0--2分)

1.思维导图

2.谈谈你对查找运算的认识及学习体会。

本章学习的是关于查找的有关知识,有线性表的查找:顺序查找、折半查找、索引储存结构和分块查找  树表查找:二叉排序树、平衡二叉树 B+- 树 红黑树  还有
哈希查找。 每种查找方法都有他可利用的价值和不同的特点。折半查找、二分查找:这个需要查找对象是有序的,每一次都找1/2的部分,查找次数大大的减少了。时间复杂度是O(logN)。二叉查找树的插入和删除都非常的方便,很好的解决了折半查找添加删除所带来的问题。平衡二叉树会解决二叉树在某种情况下会存在效率问题。B-的特点:
1.树中每个结点最多有 m 个孩子;
2、除根结点和叶子节点外,其他每个节点至少有 m / 2 个孩子;
3、若根结点不是叶子节点,则至少有 2 个孩子;
4、所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息
其他算法就不一一介绍了,他们都各有各自的优点缺点,他们之间可以互补等等  通过学习本章的查找算法,我学到很多以前不知道的查找方法,了解到更多解决问题的好算法。

2.PTA实验作业(6分)

2.1.题目1:题目名称

是否二叉搜索树

2.1.1设计思路(伪代码)

begin:
IsBST函数传入二叉树T
    定义静态整型变量s=-1
    定义bool类型变量result
    if T为空 then 返回true end if
    递归遍历左孩子,result接收返回值
    if result为false 返回 false end if
    else if T->Data大于s then s=T->Data end else if
    else 返回false end else
    递归遍历右孩子,result接收返回值

2.1.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)

2.1.3本题PTA提交列表说明。


说明: A1.这道题代码量较少,所以在dvc打测试没什么问题,提交一遍过

2.2 题目2

7-1 QQ帐户的申请与登陆

2.2.1设计思路

int main()
{
    输出数据 
    for (i = 0 to T)
    {
        输入数据
        cin >> order >> account >> password;
        if (order == 'N')
        {
            调用注册函数Register(account, password);
        }
        else
        {
            调用登录函数Login(account, password);
            
        }
    }
    return 0;
}
void Register(string &account, string &password)
{
        if(已经注册)
        cout << "ERROR: Exist\n";
        
        else(没有注册)
        mymap[account] = password;
        cout << "New: OK\n";
}
void Login(string &account, string &password)
{
    if (账号不存在)
    {
        cout << "ERROR: Not Exist\n";
    }
    else if(密码正确)
    {
        cout << "Login: OK\n";
    }
    else 密码错误 
    {
        cout << "ERROR: Wrong PW\n";
    }
}

2.2.2代码截图


2.2.3提交列表及说明


说明:Q1.在函数结束的地方没有return 0导致编译错误
A1.函数大部分用到c中的if else 语法,较易理解

2.3 题目3

7-2 航空公司VIP客户查询

2.3.1设计思路

begin:
定义n,遍历查找是否为会员 
 scanf("%d", &n);
    while(n--) {
        char c = '0';
        scanf("%lld%c", &id, &c);
        if(c == 'x') {
            id = -id;
        }
        if(table.count(id)) {
            printf("%lld\n", table[id]);
        } else {
            printf("No Info\n");
        }
    }
    return 0;
}

2.3.2代码截图


2.3.3提交列表及说明


Q1.这题有些地方是参考同学思路的,循环遍历哪里修改了一下
Q2.编译错误: 用错了编译器
A1.从同学代码中了解到了新的查找思路

3、阅读代码(-2--2分)

找一份和查找运算相关代码,谈谈你对这个代码认识体会。
https://blog.csdn.net/xiezhi123456/article/details/87095823

  设计程序,实现哈希表的相关运算,并完成如下功能:
*    1、建立关键字序列(16, 74, 60, 43, 54, 90, 46, 31, 29, 88, 77)对应的哈希
*    表A[0..12],哈希函数为H(k)=k%p,并采用开放地址法中的线性探测法解决冲突
*   
*        这里的哈希表A[0..12],m=13,取p=m=13,哈希函数H(k)=k%13
*    解决冲突的线性探测法是:d(0)=H(k),d(i+1)=(d(i)+1)%m
*    2、在上述哈希表中查找关键字为29的记录
*    3、在上述哈希表中删除关键字为77的记录,再将其插入
体会: 通过阅读作者的哈希表的运算算法,我领会哈希表的构造和查找过程及其相关算法设计
作者的代码中有出现用循环结构处理哈希表中的冲突问题,算法中adr = (adr + 1) % m 采用线性探测法找下一个地址
我觉得是我学到并且认为很妙的一点。当然代码中还有比较多可以借鉴和学习的地方,总之收获还是非常大的
posted on 2019-06-14 14:38  书写诗般代码  阅读(222)  评论(0编辑  收藏  举报