博客作业05--查找

本文总结了数据结构的学习要点,包括B树、B+树、平衡二叉树及哈希表等查找方法,并通过PTA平台进行了实践,具体介绍了二叉搜索树验证、二叉搜索树最近公共祖先及QQ账户申请登录等功能的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.学习总结(2分)

1.1查找的思维导图

1233791-20180526143312380-237393620.png
1233791-20180526143347399-962994151.png

1.2 查找学习体会

  • 查找有很多方法,感觉知识点挺多挺乱挺杂,B—和B+树的插入和删除操作,平衡二叉树的调整,删除都挺容易混乱的,哈希表的查找及其他代码的操作
  • 知识点挺紧凑,画图操作性的东西很多,map函数的使用自己还是一知半解,ASL的计算方式在不同的查找方法下都挺不同的,需要好好去区分消化
  • map是STL的一个关联容器,它提供一对一的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,map的很多用法都和STL中其它的东西结合在一起,比如在排序上,这里默认用的是小于号,map中由于它内部有序,由红黑树保证,因此很多函数执行的时间复杂度都是log2N

  • STL 容器的查找函数:https://blog.youkuaiyun.com/u014260855/article/details/38125295

2.PTA实验作业(4分)

2.1 题目1:6-2 是否二叉搜索树

2.2 设计思路(伪代码或流程图)

bool IsBST ( BinTree T ){
  空树返回真
  定义静态变量 min=-32768;
  (中序遍历:)
  递归左子树
   if(左子树上的数比根结点小)
    把T->data的值赋给min
   否则返回false
   递归右子树
  返回true 
}

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1233791-20180526174022846-111421201.png

2.4 PTA提交列表说明。

1233791-20180526180029595-1195324239.png
1233791-20180526180049399-1100427532.png
编译错误

自己的编写有括号出错

部分正确

1233791-20180526180452977-962604361.png

自己没有定义静态变量min,这样每次递归比较时min是不变的,根据讲解定义静态变量后才正确

2.5 题目2:6-3 二叉搜索树中的最近公共祖先

2.6 设计思路(伪代码或流程图)

int LCA( Tree T,  int u, int v ){
    空树或者有元素不在树时直接返回error
    其中有一个在根上,直接返回该根结点值
    一个在左子树一个在右子树时,返回该树根结点 
   都在右子树上
        return LCA(T->Right,u,v);  
    都在左子树上
        return LCA(T->Left,u,v); 
}

int find(Tree T,int number){
    空树返回0
    找到返回1
    在左子树上
    return find(T->Left,number);
        在右子树上
    return find(T->Right,number);
}

2.7 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1233791-20180526163013798-917610015.png

2.8 PTA提交列表说明。

1233791-20180526163047193-14569194.png
1233791-20180526163109792-603925649.png
1233791-20180526195641368-1644664913.png

部分正确

都在左子树上与都在右子树上书写错误,自己原先写1233791-20180526171732907-2026955755.png

应改为1233791-20180526171844804-405276813.png

2.9 题目3:7-1 QQ帐户的申请与登陆

2.10 设计思路(伪代码或流程图)

#include <iostream> 
using namespace std;
#include <map> //调用map容器,储存QQ账号
int main(){

  输入组数num
  for i=0 to i<num i++{
      输出字符串ch
      若ch[0]=='N'为新用户时
         申请账号密码
         已存在该账号时输出ERROR: Exist;
         否则输出New: OK
      旧用户
          输入账号密码
          无该用户时,输出ERROR: Not Exis;
          否则输出Login: OK
}

2.11 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1233791-20180526162704972-868917794.png

2.12 PTA提交列表说明。

1233791-20180526162729295-1446831089.png

编译错误

自己C与C++语言的问题

一开始感觉挺麻烦挺没思路的,在老师介绍Map后感觉确实代码量会少,不过自己对map的使用还是很懵懂啊

自己一开始用C写都提示有些东西找不到,之后换成c++的头文件就可以,感觉#include 需要在C++的头文件里运行比较方便找到

3.截图本周题目集的PTA最后排名(3分)

本次题目集总分:175分
必做题共:145分

3.1 PTA排名(截图带自己名字的排名)

1233791-20180601203331790-1465598245.png

3.2 我的总分:145

本题评分规则:

(1)2个题目集PTA总分145--175分:3分(全部题目都做)
(2)PTA总分在120分--145分:2.5分(必做题全部做完,选做题做部分)
(3)PTA总分在105--120分:2分(必做题大部分做完)
(4)PTA总分在80--105分:1.5分
(5)PTA总分在45分-80分:1分
(6)PTA总分在45分以下:0分

4. 阅读代码(必做,1分)

本次为必做

/*
*@brief rbt_left_rotate
*@param[in] T 树根
*@param[in] x 要进行旋转的节点
*/
void rbt_left_rotate( rbt_root_t* T, rbt_t* x){
    rbt_t* y = x->right;

    x->right = y->left;
    if(x->right != T->nil)//更新某结点的父亲时,要确定此结点不是T.nil
        x->right->p = x;

    y->p = x->p;
    if(x->p == T->nil){//如果x以前是树根,那么现在树根易主了
        T->root = y;
    }else if(y->key < y->p->key)
        y->p->left = y;
    else
        y->p->right = y;

    y->left = x;
    x->p = y;
}
/*
*@brief rbt_right_rotate
*@param[in] 树根
*@param[in] 要进行旋转的节点
*/
void rbt_right_rotate( rbt_root_t* T, rbt_t* x){
    rbt_t * y = x->left;
    x->left = y->right;

    if(T->nil != x->left)
        x->left->p = x;

    y->p = x->p;
    if(y->p == T->nil)
        T->root = y;
    else if(y->key < y->p->key)
        y->p->left= y;
    else
        y->p->right = y;

    y->right = x;
    x->p = y;
}
  • 这是红黑树旋转代码
  • 代码优点:该代码对结点中指针结构的改变很巧妙熟练,对各类指针地址的改变,确定思路清晰,该旋转的时间复杂度只有O(1),体现了运用红黑树的效率高
  • 代码链接:红黑树:https://blog.youkuaiyun.com/weewqrer/article/details/51866488
  • 代码链接:哈希表及其常用算法(代码实现):https://blog.youkuaiyun.com/wangxu_zju_2010/article/details/7489548
  • 代码优点:这两博文较详细的列举了红黑树与哈希表的基本操作代码,有图文解释很清晰明了

5. 代码Git提交记录截图

1233791-20180526204117373-1665412151.png

转载于:https://www.cnblogs.com/linxiaolu/p/9092844.html

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值