DS博客作业07--查找

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

1.思维导图

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

  这两周学习的章节是查找,查找算法在上个学期和之前的章节的时候学过一些,比如顺序查找和折半查找。这些是比较简单的查找算法。本章学习了一些很难的查找算法。
  本章介绍了三类查找,分别是线性表查找,树表查找和哈希表查找。线性表查找是比较简单的一类,本章学习了顺序查找,折半查找和分块查找这三种在线性表上进行查找的方法。其中折半查找的效率是这三种里面效率最高的方法。树表查找能对动态查找表进行高效率的查找。哈希表的查找需要构造哈希函数,使哈希冲突的可能性尽可能地小。
  在学习查找的时候基本都是只搞懂了算法的原理而忽视了代码,所以导致课堂派的作业会写而pta上的题目不会写,所以应该要加强对代码的了解。

2.PTA实验作业(6分)

2.1.题目1:6-1 二叉搜索树的操作集 (30 分)

本题要求实现给定二叉搜索树的5种常用操作。

2.1.1设计思路(伪代码)

BinTree Insert( BinTree BST, ElementType x )
{
	插入操作 
}
BinTree Delete(BinTree BST,ElementType X) 
{ 
   if树空,直接输出"Not Found“ 
   else 找到要删除的X对应结点位置 
      if X<当前结点 递归调用 Delete(BST->Right,X) 
      if X>当前结点 递归调用 Delete(BST->Left,X) 
      else if X=当前结点 判断当前结点左右孩子是否为空 
          if 左右孩子不空 调用函数FindMin(BST->Right) tmp->Data=BST->Data 保存数据 BST树的右孩子置为结点 保证二叉搜索树的有序性 
          else if if左孩子为空, 右孩子置为结点 
          if右孩子为空,右孩子置为结点 
    return BST
}
Position Find( BinTree BST, ElementType x )
{
	if树空 return NULL
	if当前结点=x return BST
	else if x<当前结点   return Find(BST->Left,x)
	else if x>当前结点   return Find(BST->Right,x)
	return BST 
}

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

2.1.3本题PTA提交列表说明。

2.2 题目2:6-2 是否二叉搜索树 (25 分)

本题要求实现函数,判断给定二叉树是否二叉搜索树。

2.2.1设计思路(伪代码)

bool IsBST ( BinTree T )
{ 
  if T为空 或 !T->Left&&!T->Right then 返回true
  else
  {
  	if T->Left 
  	{
	  TLeft = T->Left;
	  while TLeft->Right then  找该点左子树最大值
	} 
	if T->Right
	{
	  TRight = T->Right;
      hile TRight->Left then  找该点右子树最大值
	} 
	return (T->Left?(T->Data>TLeft->Data):1)&&(T->Right?(T->Data<TRight->Data):1)
  } 
} 

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

2.2.3本题PTA提交列表说明。

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

3.1 题目

写一个函数,实现一个整形有序数组的二分查找

3.2 做法解析

二分查找的思路就是折半查找,要有左边界与右边界,我们才能确定中间元素,当左边界与右边界重合的时候,这时查找对象就变为一个元素,若它不是要查找的元素,那么所查找的元素便不再数组中。这样我们就清楚地定义出所需参数,以及退出条件。

我们需要一个左边界,一个右边界,还有中间元素,若左边界大于右边界,退出循环。若找到,则返回元素所在下标。

3.3 代码截图

3.4 学习体会


posted on 2019-06-16 17:47  风言风语r  阅读(241)  评论(0编辑  收藏  举报

导航