博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
博客作业05--查找
阅读量:6251 次
发布时间:2019-06-22

本文共 2899 字,大约阅读时间需要 9 分钟。

1.学习总结(2分)

1.1查找的思维导图

1233924-20180527023500560-1765479741.png

1.2 查找学习体会

查找是C语言的重要内容,以前我就学过顺序查找和二分查找,现在学习的查找主要通过,哈希表,二叉搜索树,二叉平衡树等数据结构来等来实现,这样的查找方法可以更高效率地进行查找,学习的内容包括平衡树的LL、RR、RL、LR四种变换,哈希冲突的处理,以及查找的时间复杂度,ASL成功与不成功的计算,B-树插入删除时的分裂等等,但是遇到的问题是在学会基本原理的时候,对于查找的运用并不是了解很多,应该练习更多的对于查找的运用,还有就是map的使用使得函数更为简洁。我发现查找的内容还有很多没有学习精深,还有很多需要学习的,现在学习的只是基本的查找内容,还要更加努力。

2.PTA实验作业(4分)

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

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

bool IsBST ( BinTree T ) if(T节点为空)   return 1; else      {    定义一个静态整数变量min=-999999     递归左节点      if(T的data大于min)       min=T->Data;      else       return 0    递归右节点      }

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

1233924-20180526145235995-1682172499.png

2.4 PTA提交列表说明。

  • 这道题我起先是想用中序遍历将所有的数据存放在数组中,再将其中的树看是否顺序来判断,但是代码量太大,后来老师说了这种方法效率大大提高,
    用递归来操作,代码就几十行就完成了,受益匪浅。

2.1 题目2:6-3 二叉搜索树中的最近公共祖先(25 分)

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

int find(Tree T,int u)  查找函数  if(T为空)      return 0  else{     采用递归法查找     找到 return  1     若小于data则递归左边     否则递归右边         }查找最近公共祖先int LCA( Tree T,  int u, int v )  {  if(T为空)    return ERROER  if(T中没有u或v)    return ERROER  if(T的两边分别是v和u)    return T->Key  if(u大于T->KEY)    向右递归  if(u小于于T->KEY)    向左递归  }

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

1233924-20180526213201871-1315860734.png

2.4 PTA提交列表说明。

  • 这题我做了挺久但是还是没做出来,后来请教了舍友才明白怎么做,这道题重点是在于几个if的顺序,首先是先判断是否存在于搜索树中,
    然后判断是否是其祖先,(就是判断他的uv是否在左右两边)这点是这道题的关键。

2.1 题目1:7-1 QQ帐户的申请与登陆(25 分)

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

map
pmap
pp 定义n作为指令个数 定义x,y,z字符串存储QQ的账号密码 输入n while(n--) { 输入 x,y,z的值 if(x为L) { if(p[y]不存在) 输出ERROR: Not Exist else 判断密码pp[y],若pp[y]为z 则失败否则登陆成功 } else { if(p[y]为1) 表示账号已存在 else { 将账号存入p[y]为1将密码z存入pp[y] 并输出New: OK }

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

1233924-20180527012203595-1998340213.png

2.4 PTA提交列表说明。

  • 这道题主要是map的使用,原先没用到map想算法的时候用红黑树的话要自己建树,代码量很大,用到map后,只需要定义一下mao就行,代码并不复杂只是关于map的使用。

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

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

1233924-20180527013323054-488593304.png

3.2 我的总分:145

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

/* * 添加节点:将节点(node)插入到红黑树中 * * 参数说明: *     root 红黑树的根 *     node 插入的结点        //  */static void rbtree_insert(RBRoot *root, Node *node){    Node *y = NULL;    Node *x = root->node;    // 1. 将红黑树当作一颗二叉查找树,将节点添加到二叉查找树中。    while (x != NULL)    {        y = x;        if (node->key < x->key)            x = x->left;        else            x = x->right;    }    rb_parent(node) = y;    if (y != NULL)    {        if (node->key < y->key)            y->left = node;                // 情况2:若“node所包含的值” < “y所包含的值”,则将node设为“y的左孩子”        else            y->right = node;            // 情况3:(“node所包含的值” >= “y所包含的值”)将node设为“y的右孩子”     }    else    {        root->node = node;                // 情况1:若y是空节点,则将node设为根    }    // 2. 设置节点的颜色为红色    node->color = RED;    // 3. 将它重新修正为一颗二叉查找树    rbtree_insert_fixup(root, node);}
  • 这是红黑树的建立c语言代码,rbtree_insert(root, node)的作用是将"node"节点插入到红黑树中。其中,root是根,node是被插入节点。实现插入的时候将节点的颜色改变

    ,并且用递归方法调整了红黑树。十分巧妙。

  • 这里面是我看到的比较详细的红黑树C语言实现讲的简洁清晰,细节方面写的很好,很好理解分享给大家。

5. 代码Git提交记录截图

1233924-20180527015709742-57378580.png

转载于:https://www.cnblogs.com/czx153/p/9093195.html

你可能感兴趣的文章
matlab和python转换_将MATLAB代码转换为Python:Python类型和操作顺序
查看>>
jmeter3000用户压测_jmeter集群压测搭建
查看>>
转子接地保护原理_发变组保护动作逻辑
查看>>
hive中groupby优化_面试必备技能-HiveSQL优化
查看>>
uni 页面加载完毕_HTML页面生命周期
查看>>
c语言机票座位预定系统_趁东京奥运!日航要免费送5万张国内机票!给非日本居民...
查看>>
创业冲突的五种解决方法是_冲突管理的五种策略
查看>>
lsmw中文显示乱码_中文注释不能在keil 4/5中正常显示——都是方框或乱码?
查看>>
hcg值小于0.1_【原理】JavaScript 中 0.1 + 0.2 为什么不等于 0.3?
查看>>
springboot的jsp应该放在哪_健身小白用2个月亲身经历告诉你小白去健身房,应该做到哪几点...
查看>>
opencv表面缺陷检测_工业产品表面缺陷检测方法
查看>>
kettle使用数据库来生成序列_时间序列数据库Influxdb的使用
查看>>
配置babel_关于 Babel 你必须知道的
查看>>
数据丢失与重复_消息队列重复消费和数据丢失问题(石衫面试突击学习笔记)...
查看>>
摄像头 火狐_为什么谷歌浏览器打不开电脑摄像头?
查看>>
两张图片合成一张_ps技巧:大光比照片后期曝光合成技法
查看>>
码条形码属性_条码生成器如何批量生成code 11码
查看>>
和lua的效率对比测试_不同编程语言能耗不同?看这27种语言对比!
查看>>
让某控件失去焦点_常用基本控件测试用例(一)
查看>>
天气模式_今年台风活跃期即将结束!下周天气将开启“大变脸”模式
查看>>