博客作业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)。