00:01
好,我们来写这个查找,查找这个事情呢,首先同学们看啊,嗯。肯定你这个链表要给我提供这个方法,那么我来写一个查找,在哪写呢?就在这个下边写一个来走一个DF。Find。By find的employee by ID,假设我们现在呢,就是按ID来查的,你给我一个ID,我就返回一个,什么呢,一个雇员。当然,呃,应该这么说。我说一下这个说明啊,如果有返回这个employee。没有返回空。就可以了。好的,那现在呢。因为我我目前大家看这这个地方就凸显我们这种单链表的一个缺陷。单链表,虽然我现在可以通过散列来提高我们检索的速度,因为原先你是一整条链表,我现在已经可以给它闪开了,但是大家也知道,虽然你散开过后,它仍然是一个一个比较还是不太好,所以说在更多的情况下呢,下面我们可以写成这个一个。
01:13
一个数组配合我们的这个二叉数来做,但是这个方法呢,也是也有也有也是它的一个一个应用场景的,知道吧,在效率要求不是很高的情况下,也是可以用的。那现在至少别人再问你。用链表和用这个二叉树,为什么二叉树快。你的回答就跟以前不一样了,因为你真的是写过的。而不是说只是听老师讲了一遍,那种感觉是完全不一样的,那现在因为我是单列表,没有办法,我就只能。慢一点啊,那就写啊,那只能没办法了,那只能是便利了,没有折,就一个个的比。一个一个的比,而且但是但是有一点啊,因为我们ID不重复,那找到一个就可以直接返回了。
02:01
啊好,呃,那现在我们来来玩一把啊,便利,当然这个对我们来说太easy了,我们首先看现在有没有数据,如果hide。等于。空那就没什么可说的,就是你现在链就是链表为空。那就是当前这个链表为空这样写啊,就是链表。链表为空。链表为空啊,没有数据查找不到。就是你比如说我传了一个ID,一闪列到这个链表,但这这这条列表没有数据,那就没有了,直接return。否则我们仍然用这个跑龙套的来做,对还是用current,用这个temp到,用这个head指向它到下面呢,老规矩用Y循环啊,这已经形成一个套路了,Y循环我走一下,如果这个current。不,呃,如果他他等于空,那就不用说了啊,我们就这样写。
03:07
就brick。Break。好就退出去L4呢,呃,否则的话呢,我们就判断。判断什么呢?如果当前这个current.next。ID等于你要找到ID,这就说明你找到了。就说明你找到了。好,找到过后呢,你也break,但是你可以做一个标志。对吧,你可以写个标志就是flag,比如说我默认是找不到的。我默认找不到,然后呢,一旦找到了,我把这个flag。Or flag等于一个处。等于一个处。好,然后这边呢,整个用这个break包起来。整个用这个break包起来,包起来过后我们就来判断一下,如果这个flag怎么怎么样,如果flag就是呃,如果它不等于这个force了。
04:04
而这样子,Flag等于真就代表找到了。找到,否则就代表没有找到。找到。L呢,就代表没有找到。但是但是发现我这样写啊,没有找到啊没有。没有找到我,我问同学们一个问题,我这样写是不是有点无聊啊?我这样写其实没有意义。因为这个flag完全没有必要要。为什么没有必要要呢?因为你大家想一想,你这个结果无所谓,就是找到或者没有找到对不对。那大家想他没有找到,只有一种可能,就是一个抗领空。是不是因为你你你要么找到,要么找不到你退出的条件啊,对,我这还少了一个条件啊,你你这个退出的条件只有只有两种可能,一种是在这个地方break,一种是在这break。
05:01
是不是,如果你从这break出来,是不是看本就等于空啊。是不是这个道理,如果你从这退出来,是不是这个这个卡它是不不可能等于空的。能理解吧,所以说你这个这些条件完全是无聊的,直接拿掉就完了,连这个判断都没有,直接一个return当前就完了,大家看这个代码能看懂吗?其实我完全可以这么去写。这就是要同学们去动脑筋的地方,连这个都不要。大家看一下这个代码比刚才就简洁很多了,再看一下怎么怎么来的啊。先让这执行害。而且我们可以肯定的,诶,这个瑞腾为什么报错,这个地方就直接空。就是说我先把head给了这个current current判断为为空,如果为空,直接break,其实当然第一次不可能为空的,因为你你的head围空早就弹出去了,说至少到这儿至少有一,至少有一个员工。
06:00
啊,如果这个员工,呃,比较如果这个员工就是就退出去,那这个C肯定不等于空,否则next一下,Next一下再走,判断为空,那么如果他从这退出去的。那car就是空,如果从这退出去的color是什么就是什么,说这个代码就可以这样去写,很简洁。好,同学们,那这个代码大家应该能看懂了,最后我们find by这个ID呢,绝对还是要放在我们的哪里面去写呢,各位朋友。仍然放在哈希里面去写,对不对?因为为什么一定要放在这写,他根本原因就是只能只能这个哈希表才知道到哪条列表去找。它的关键点是在这儿。不是说他不能找他,因为哈希表才知道你这个,你这个员工到哪去找好同学们这里面编写编写一个find啊,Employee find ID,那各位同学我开始写这个代码啊,这个就很简单了,来Di Di find。
07:00
Employee。Employee by ID,我传进去一个ID。各位,当然这边呢,我也比较简单,就直接调用哦对,首先要确定要到哪条链表去找是吧。是不是先还是一个老规矩啊?这两个哈希算法一定要一样。好,那么就把它放进去了,就是返回该员工ID对应的那条列表。但是如果有的话,就说你这个ID,如果有的话,一定在这条列表里面,如果没有,那你也不用在别的列表去找了,肯定没有。是不是?因为我已经哈希到这边去了,你不用担心,如果这条列表找不到,你别到别的地方去找了,不可能在其他地方,那就到。代码就很简单了,我来搜一个employee,等于我们this.employee list,然后里面的employee number点我们的find。By ad把这个放进去。
08:00
好的,那就做一个判断,如果employee不等于空,各位说明我们找到了没有?找到了没有?是不是找到了啊,Else就说明没有找到。是不是这个道理,那就这样写了啊。没有找到。编号为。编号。为,ID号为。就是说没有找到ID为这个的。员工。就没有这个人。你说错了。来各位,我把它放进去没问题吧,那如果找到了是不是,你把这个信息打出来就可以了。那你说我找到了它是在哪条链表里面输出来就可以了,来走一个。就好,就我们这样写,找到了在在第几条列表里面把输出来在D。在地。这条链表里面。啊,在这条列表里面我们找到了。
09:03
找到ID等于这个的啊,员工啊,名字呢,也把它数出来看看对不对。Name等于百分之S,好,ID就是这传递的ID名字显然就是employee里面返回的这个名字了。好,同学们,我们来玩一把。看这代码有没有问题啊,好的,那现在呢,我们同样把这个菜单给大家怎么样补全一把,是不是来走一个case。然后呢,我们这叫做诶范是不是还没写。来写一个find吧。Find表示查找员工。好的,那查找员工呢,现在呢,我们就写一个find。没问题吧,诶,Spend OK,那么现在首先还得提示人家一句话,输入要查找的ID,输入要查找的雇员的什么呀,ID号我搜一把。
10:03
等于std点我们的read一个int,好,下面代码就比较简单了,直接调用我们这个哈希table里面的这个范的固远白ID,把ID传进去。来,同学们玩一把。好的,那我们来跑一跑吧,首先呢,我们上来过后先加一个加一个啊,比如加一个一号叫宋江。我们先历一下,现在呢,在第一条列表里面有一个宋江,我们来find一下。我先输一个一。在第一条列表里面找到宋江了,那我再输一个别的啊,同学们,我们再再再再再找一个人,比如这个是十,那肯定就没有。啊十诶十它这个打出列表为空,是不是这个列表为空是怎么出来的呀。打出十,为什么他出一个链表为空啊。
11:00
是不是因为我在查找这个十对应的那个链表的时候,那个链表一个数据都还没有。哎,是这样返回的啊,当你这个信息大家看懂,我们加一个吧,我们再加一个爱的,比如说加一个20这个员工或者。211这个员工,比如说叫做叫做武松。回车我们,呃,我们历了一下。这个员工呢,他他诶他也刚好都都在一,我们再来查找一个范211。回车,好,我们找到在第一条列表找到武松完全的没有问题啊,好,那当然你如果闪开也是一样的,好同学们,那关于这个哈希表的一个,呃,就是哈希表的我们所说的一个加入。还有一个删除,就是他的需求,我们就说完了,那晚上同学们就做一件事情。你们晚上今天要做的事儿呢?呃,就在这个老师这个基础上。
12:00
把它做成一个有序插入。那什么意思呢,大家看啊,我这个代码现在有一点问题。比如说我加一个ID的时候,这个宋江是在这儿。武松是在这里对不对,那那现在你看我再加一个,加一个编号为八的。比如说这个叫吴用。呃,我,我总要给他留点东西,大家念一念的啊,吴用这个时候我一回车,各位同学我历试一下,有没有发现吴用会在武松的屁股后边。因为我没有做这个这个大小的验证,你们做一件事情,就说我不管你怎么加,你完成这样一个任务,第一个保证有序,第二个再看一个问题,Find,我再加一个,我再加一个211。你会发现他仍然能进去。我们写个人,比如说叫做张三。张三,OK,那么这个时候呢,我历史的一把,你会发现张三又加进去了。我们假定。
13:06
两个条件给我加进去处理一下,第一个,不管你怎么加,只要落在一条链表,保证它是有序的,第二个,如果这个ID已经有了,提示他信息,这个雇员ID已经用过了,不能再用。今天晚上你们就在老师基础上把这个功能加进去就足以,好,我把这个需求给同学们整理一下啊各位,那么我们截一段。
我来说两句