博客作业05--查找

1.学习总结(2分)

1.1查找的思维导图

1.2 查找学习体会

谈谈你对查找算法学习体会。也可以谈谈STL容器中查找如何用的。

  • 查找算法包含几种,比如:顺序查找、二分查找、二叉排序树查找、哈希表等······
  • 二分查找
Int BinSrch(RecordList l, KeyType k)  
   {  
            low = 1;  
           high = l.length;  
           while(low <= high)  
            {  
                mid = (low + high) / 2;  
                 if(k == l.r[mid].key)  
                      return mid;  
                 else if(k < l.r[mid].key)  
                      high = mid -1;  
                 else  
                      low = mid + 1;  
            }  
            return 0;  
   }  
  • 二叉排序树查找
BSTree SearchBST(BSTree bst, KeyType key)//递归算法  
   {  
            If(!bst)  
                      return NULL;  
            else if(bst->key == key)  
                      return bst;  
           else if(bst->key > key)  
                      return SearchBST(bst->lchild, key);  
            else  
                      return SearchBST(bst->rchild, key);  
   }  
或(递归)
int BinarySearch2(int a[], int value, int low, int high)
{
    int mid = low+(high-low)/2;
    if(a[mid]==value)
        return mid;
    if(a[mid]>value)
        return BinarySearch2(a, value, low, mid-1);
    if(a[mid]<value)
        return BinarySearch2(a, value, mid+1, high);
}
  • 查找分有静态查找和动态查找,无序查找和有序查找等。这章查找的学习都是图形和代码结合的,它跟上一章的树有很大的联系。

2.PTA实验作业(4分)

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

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

bool IsBST ( BinTree T )
	定义一个静态变量min来标记最小值

	如果T是空数,证明是二叉搜索树

        遍历树的左节点
	IsBST(T->Left)

	如果T->Data>min,则证明满足二叉树中序遍历是有序的的性质
		min更新为T->Data
        否则一定不是二叉搜索树
        
        遍历树的右节点
	IsBST(T->Right)

2.3 代码截图

2.4 PTA提交列表说明。


最后返回1的语句放在了判断T->Data>min的后面,导致没有执行全部语句就直接返回。

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

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

       定义一个容器为q
	map<string,string>q

	定义字符串c,id,pass,temp;

	输入n
	for   i=0   to   i<n
	
		输入字符串cin,c,id,pass;
		如果指令为申请账号时
		
			如果已存在该账号
		
			    输出"ERROR: Exist"
		    
		        否则,不存在该账号时
		   
		           记录新账号
		           并输出"New: OK”
	      
	        如果指令为登陆账号时
	
		        如果该账号不存在
		
			     输出"ERROR: Not Exist"

		        否则,存在该账号时

			     判断密码是否正确,如果密码正确
				 输出"Login: OK"
			
			     如果密码不正确
				 输出"ERROR: Wrong PW"

2.3 代码截图


2.4 PTA提交列表说明。


写的时候用map头文件来写比较简单。

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

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

int find(Tree T,int u)
看u节点是否存在
	如果T==NULL
	     节点不存在,返回0
	如果T->Key==u
	     在树中找到u节点,返回1
	如果T->Key<u
	    递归调用右子树
	如果T->Key>u
	    递归调用左子树

int LCA( Tree T, int u, int v )
查找最近公共祖先
    如果T==NULL 
           return ERROR

    如果u或v在树中不存在
          返回ERROR

    如果T->Key大于u和v

	  递归调用左子树

    如果T->Key小于u和v

	   递归调用右子树

    最后返回T->Key

2.3 代码截图

2.4 PTA提交列表说明。

  • 没讨论当T为空的情况,要返回ERROR。
  • 开始没考虑到u或v不在树中的情况,后来加了个函数来查找,在找公共祖先前要判断u,v是否存在,但凡有一个不存在就直接返回ERROR。

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

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

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

3.2 我的总分:128

分数:2.5分

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

  • 哈希表实现查找代码
    可以去看STL重map、hash_map容器源码如何实现。也可以看JAVA\Python源码。



    哈希表(散列表)是直接通过关键字key得到要查找的记录的内存存储位置。如果没有冲突,哈希表查找算法的时间复杂度为O(1)。

5. 代码Git提交记录截图

posted @ 2018-05-26 22:35  梁才玉  阅读(199)  评论(1编辑  收藏  举报