查找
发电机转子一点接地问题查找及处理

3 转子一点接地查找及传统处理方法
当发生转子一点接地时,发电机的转子一点接地保护会发出 报警,此时利用发电机转子绝缘监测表,来判断是否存在转子一 点接地现象。如存在一点接地还需进一步确定是励磁装置接地还 是转子绕组接地,是非金属性接地还是金属性接地。当确定转子 发生接地时,且接地电阻较低时,则应停机处理。传统的处理方 法是将励磁装置与转子绕组断开,在光线比较暗的环境中用绝缘 兆欧摇表对转子绕组进行测量,并对转子绕组进行观察,由于接 地电阻较低,在绝缘兆欧摇表产生的直流电压下,会使转子绕组 对铁芯放电,产生火花,根据放电火花的位置可以找出转子的接 地点。如果是金属性接地,则此方法无法产生作用,只有将转子 的所有磁极引线焊开,使转子的每个磁极都断开,然后用绝缘兆 欧摇表对每一个磁极逐一进行测量,从而找出接地的磁极。找出 接地的磁极后,将转子吊出,将磁极的销钉拔下,取下磁极,对 损坏的绝缘进行重新处理。由于磁极引线线径较粗,且磁极个数 较多焊接时较为费时费工,焊接后还需进行绝缘处理,因此传统 的处理方法工作量较大,时间较长。
发电机转子一点接地 问题查找及处理
1 概述 转子是水轮发电机的核心部件,起着电能转换的重要作用。
为了提高磁电转换效率,定子线圈与转子线圈之间的空气气隙 较小,只有几毫米,因此要求定子及转子在转动时应保持较高 的稳定性,即要求发电机系统转动时的振动值应保持在一定范 围内。当超出这个值时,会造成转子在转动中与固定的定子之 间产生碰撞,损坏发电机的定子及转子铁芯和线圈。为了避免 转子一点接地的发生,除了在制造及安装时要保证符合规范外, 在运行时也应加强运行管理,合理操作。要加强发电机保护整 定,当发生故障时能及时快速地排除故障,以减少故障电流对 发电机造成冲击而产生振动;在正常运行时,应避开发电机的 负荷振动区,以减少发电机的振动。当发生发电机转子两点 接地故障时,转子受到偏心力矩的作用,使转子的受力不均而 产生强烈的振动,很容易造成发电机转子和定子的碰撞现象
2.2 因特网信息的查找

• 4、“海上生明月,天涯共此时。”出自 __________的《__________》 • 5、花间一壶酒,独酌无相亲。 ____________,______________。月既 不解饮,影徒随我身。暂伴月将影,行乐须及 春。我歌月徘徊,我舞影零乱。 • 6、水里一个月亮,天上一个月亮,天上的月 亮在水里,____________。低头看水里, 抬头看天上,看月亮,_________,一个在 水里,一个在天上。
• 缺点:数据库的规模相对较小,收录范围不够全面、更新周期较 长,有时可能会造成链接失败。 • 代表网站:雅虎、搜狐、新浪、网易
关键词
• 什么是关键词 提炼正确的关键词 就是您输入搜索框中的文字,也就是您命令搜索引擎 无庸至疑,选择正确的关键词是一切的开始。学会从 寻找的东西。 复杂搜索意图中提练出最具代表性和指示性的关键词 对提高信息查询效率至关重要,这方面的技巧(或者 说经验)是所有搜索技巧之母。 例如:多少级以上的地震会造成破坏? a)4.5级 b)5级 c)6级 关键词:震级 造成破坏
练一练
• 1、 与中国人在中秋节的时候吃月饼不同,日本人在赏 月的时候吃江米团子,称为“__________”。 • 2、 山东_________(城市名)中秋节吃一种应节食品 叫“麦箭”。 • 3、关于中秋节还有一个传说:相传月亮上的广寒宫前 的桂树生长繁茂,有五百多丈高,下边有一个人常在砍 伐它,但是每次砍下去之后,被砍的地方又立即合拢了。 几千年来,就这样随砍随合,这棵桂树永远也不能被砍 光。据说这个砍树的人名叫_________,是汉朝西河 人,曾跟随仙人修道,到了天界,但是他犯了错误,仙 人就把他贬谪到月宫,日日做这种徒劳无功的苦差使, 以示惩处。李白诗中有 “____________,______________。”的记载。
2.2因特网信息的查找

实践
利用搜索引擎查找钓鱼岛相关知识,并制作成 word文件进行保存(分组完成)。 要求:1、文件名:班级+姓名,如高一5班肖勇。 2、标题:《钓鱼岛历史及简介》 3、内容:钓鱼岛的位置、面积、岛屿组成、 中国关于钓鱼岛的最早历史记载、日本关于钓鱼岛的 最早历史记载、钓鱼岛被占领历史等(格式不限)。 4、所搜索到的信息旁要注明使用的搜索引擎、 关键字及内容出处(网络地址的链接)。
2、晓慧想在网络上找自己喜欢的一首歌,你认为通过网络 帮助他的最好办法是 ( C ) A、访问某公司网站 B、访问学校网站 C、用专门的音乐搜索引擎搜索 D、访问本地政府的门户网站
3、用那种方法才能最快在网上 B、进入google的超级目录索引网页,点击“歌曲”目录。 C、进入yahoo的目录索引搜索引擎网页,点击“音乐”目录。 D、进入sohu的全文搜索引擎网的中文 网站。2000年1月由李彦宏和徐勇创立于北京中关村,每 天收入约2千多万元人民币。 CEO李彦宏以94亿美元资产 位居2011年中国内地首富榜。
• 谷歌简介:于1998年9月创立,全球规模最大的搜
索引擎, 每天收入5亿元人民币。创始人拉里· 佩 奇 • 雅虎简介:雅虎(Yahoo! )是美国著名的互联网 门户网站,20世纪末互联网奇迹的创造者之一。 创始人杨致远(美籍华人)
Internet
的
温
故
• 信息获取的一般过程: 调整
定位信息 需求 选择信息 来源 确定信息取方 法,获取信息 评价 信息
事例:小敏准备国庆长假乘火车去上海旅游,她 想知道铜仁至上海的列车时刻表及票价,该怎么 办呢?请同学们利用上节课所学的知识来帮他分 析一下。
温
故
亲朋好友
载体
语言
第五章数据库查询和数据库搜索

局部相似性和整体相似性
序列比对分类
整体比对:从全长序列出发,考虑序列的整体相似性
局部比对:考虑序列部分区域的相似性。
由于蛋白质的功能位点往往由较短的序列片段组成,故 尽管在序列的其它部位可能有插入、删除或突变,但是 这些部位的序列仍然具有相当大的保守性。此时,局部 相似性比对往往比整体比对具有更高的灵敏度,其结果 更具生物学意义。
生物序列相似性比较中绝大部分的问题在计算机科 学领域中主要体现为字符串的匹配和查找
相似性与同源性
相似性(Similarity):指序列比对过程中用来描述检测序 列和目标序列之间具有相同DNA碱基/氨基酸残基顺序所 占比例的高低 同源性(homology):如果两序列有一个共同的进化祖先, 那么称其为同源的。当两序列同源时,它们的氨基酸/核 苷酸序列通常有显著的一致性(identity)。 当相似程度高于50%时,比较容易推测检测序列和目标 序列可能是同源序列;而当相似性程度低于20%时,就 难以确定二者是否具有同源性。 两序列或者同源,或者不同源,所谓“具有50%同源 性”,或“这些序列高度同源”等说法,都是不确切的, 应该避免使用。
Hale Waihona Puke 可通过多种途径进行检索(名称、分类等级、序列等)
EBML SRS服务器界面
华南理工大学SRS服务器界面
SRS主要特点
统一的用户界面
安装通用网络浏览器即可查询世界上各地SRS服务器上的300多个 数据库 建立数据库索引文件,可快速高效实现查询,并可以某次查询结果 为子数据库进行进一步查询 超文本指针链接 可将序列分析等应用程序嵌入至基本查询中,做进一步分析及处理 数据库以文件系统的方式进行存放,便于更新和二次开发
sql不重复的查找统计数据(经典)

sql不重复的查找统计数据(经典)例表如下:表名:MYTESTTID COL1 COL2 COL31 1 A A2 1 A A3 2 A A4 2 B A5 3 B B6 3 B B7 4 C B8 4 C B9 1 A A10 2 B A1查找表中的⼀个字段,重复的只找⼀个:SELECT DISTINCT COL1 FROM MYTEST;2查找表中的多个字段,其中某个字段不重复:SELECT * FROM MYTEST WHERE rowid IN (SELECT min(rowid) FROM MYTEST GROUP BY COL1);重点:select * from 表 where 列ID in (select min(列id) from 表 group by 不想重复的列名)结果为:1 1 A A3 2 A A5 3 B B7 4 C B其中rowid为oracle中的虚拟column⽤来指向表中⼀个row的存放地址,改为其它的不能运⾏(这样理解不知对不对?哪位朋友有更好的理解请给我留⾔)min⽅法若改为max时结果如下:6 3 B B8 4 C B9 1 A A10 2 B A3查询并统计该字段的数量SELECT COL1,COUNT(COL1) FROM MYTEST GROUP BY COL1;结果为:1 32 33 24 2GROUP BY 哪个字段只能查找哪个字段和该字段的数量若要同时搜索其它字段就报错即:语句若改成 SELECT COUNT(COL1) FROM MYTEST GROUP BY COL1;或 SELECT COL1,COL2,COUNT(COL1) FROM MYTEST GROUP BY COL1;就会报错原因可能是:搜索的结果是⼀组组的数据在每⼀组数据中,COL2有很多,所以不能搜索出唯⼀的⼀个值(这样理解不知对不对?哪位朋友有更好的理解请给我留⾔)4从两个表中查询并统计数据表T_OVERTIME字段int tid = 0;//加班代码float days = 0;//⼯⽇数表T_OVERTIMEPERSONNEL字段int tid = 0;//加班⼈员代码int overtimeid = 0;//加班代码int userid=0;//⽤户ID统计每个⽤户的加班⼯⽇数SELECT erid,SUM(a.days) FROM T_OVERTIME a,T_OVERTIMEPERSONNEL b WHERE a.tid=b.overtimeid GROUP BY erid 5按多个字段分组并统计SELECT COL1, COL2, COUNT(*) AS Expr1FROM mytestGROUP BY COL1, COL2结果为:COL1 COL2 COUNT1 A 32 A 12 B 23 B 24 C 2即按COL1, COL2分组后COL1, COL2的内容和每组中记录的数量若:SELECT COL1, COL2, COUNT(DISTINCT COL3) AS Expr1FROM mytestGROUP BY COL1, COL2结果为:COL1 COL2 COUNT1 A 12 A 12 B 13 B 14 C 1若将第7条记录改为 7 4 C C则结果为:COL1 COL2 COUNT1 A 12 A 12 B 13 B 14 C 2即按COL1, COL2分组后COL1, COL2的内容和每组中COL3不重复的记录数/wolffery/trackback.aspx?articleid=18946781&key=633458003799400000本⽂章尚未被引⽤例表如下:表名:MYTESTTID COL1 COL2 COL31 1 A A2 1 A A3 2 A A4 2 B A5 3 B B6 3 B B7 4 C B8 4 C B9 1 A A10 2 B A1查找表中的⼀个字段,重复的只找⼀个:SELECT DISTINCT COL1 FROM MYTEST;2查找表中的多个字段,其中某个字段不重复:SELECT * FROM MYTEST WHERE rowid IN (SELECT min(rowid) FROM MYTEST GROUP BY COL1);结果为:1 1 A A3 2 A A5 3 B B7 4 C B其中rowid为oracle中的虚拟column⽤来指向表中⼀个row的存放地址,改为其它的不能运⾏(这样理解不知对不对?哪位朋友有更好的理解请给我留⾔)min⽅法若改为max时结果如下:6 3 B B8 4 C B9 1 A A10 2 B A3查询并统计该字段的数量SELECT COL1,COUNT(COL1) FROM MYTEST GROUP BY COL1;结果为:1 32 33 24 2GROUP BY 哪个字段只能查找哪个字段和该字段的数量若要同时搜索其它字段就报错即:语句若改成 SELECT COUNT(COL1) FROM MYTEST GROUP BY COL1;或 SELECT COL1,COL2,COUNT(COL1) FROM MYTEST GROUP BY COL1;就会报错原因可能是:搜索的结果是⼀组组的数据在每⼀组数据中,COL2有很多,所以不能搜索出唯⼀的⼀个值(这样理解不知对不对?哪位朋友有更好的理解请给我留⾔)4从两个表中查询并统计数据表T_OVERTIME字段int tid = 0;//加班代码float days = 0;//⼯⽇数表T_OVERTIMEPERSONNEL字段int tid = 0;//加班⼈员代码int overtimeid = 0;//加班代码int userid=0;//⽤户ID统计每个⽤户的加班⼯⽇数SELECT erid,SUM(a.days) FROM T_OVERTIME a,T_OVERTIMEPERSONNEL b WHERE a.tid=b.overtimeid GROUP BY erid 5按多个字段分组并统计SELECT COL1, COL2, COUNT(*) AS Expr1FROM mytestGROUP BY COL1, COL2结果为:COL1 COL2 COUNT1 A 32 A 12 B 23 B 24 C 2即按COL1, COL2分组后COL1, COL2的内容和每组中记录的数量若:SELECT COL1, COL2, COUNT(DISTINCT COL3) AS Expr1FROM mytestGROUP BY COL1, COL2结果为:COL1 COL2 COUNT1 A 12 A 12 B 13 B 14 C 1若将第7条记录改为 7 4 C C则结果为:COL1 COL2 COUNT1 A 12 A 12 B 13 B 14 C 2即按COL1, COL2分组后COL1, COL2的内容和每组中COL3不重复的记录数。
【字符串】字符串查找函数详解

【字符串】字符串查找函数详解在对 C 语⾔的编程实践中,字符串查找是最频繁的字符串操作之⼀,本节就对常⽤的字符串查找函数做⼀个简单的总结。
使⽤ strchr 与 strrchr 函数查找单个字符如果需要对字符串中的单个字符进⾏查找,那么应该使⽤ strchr 或 strrchr 函数。
其中,strchr 函数原型的⼀般格式如下:1char *strchr(const char*s,int c);它表⽰在字符串 s 中查找字符 c,返回字符 c 第⼀次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。
也就是说,strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第⼀次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。
相对于 strchr 函数,strrchr 函数原型的⼀般格式如下:1char *strrchr(const char*s,int c);与 strchr 函数⼀样,它同样表⽰在字符串 s 中查找字符 c,返回字符 c 第⼀次在字符串 s 中出现的位置,如果未找到字符 c,则返回NULL。
但两者唯⼀不同的是,strrchr 函数在字符串 s 中是从后到前(或者称为从右向左)查找字符 c,找到字符 c 第⼀次出现的位置就返回,返回值指向这个位置。
下⾯的⽰例代码演⽰了两者之间的区别:1int main(void)2 {3char str[] = "I welcome any ideas from readers, of course.";4char *lc = strchr(str, 'o');5 printf("strchr: %s\n", lc);6char *rc = strrchr(str, 'o');7 printf("strrchr: %s\n", rc);8return0;9 }对于上⾯的⽰例代码,strchr 函数是按照从前到后的顺序进⾏查找,所以得到的结果为“ome any ideas from readers,of course.”; ⽽ strrchr 函数则相反,它按照从后到前的顺序进⾏查找,所以得到的结果为“ourse.”。
第3课 查找信息
1、掌握利用搜索引擎查找信息的两种基本方法。
2、有关“关键字”的确定。
教学准备
多媒体网络教室 、相关素材。
教学方法
任务驱动法、演示法、小组合作法。
第 课时教学过程
教师活动
学生活动
效果期待
( 一) 创设情境。
师: 同学们知道 12 月 25 日就是什么日子不?对 , 没错, 就就是大家喜欢的圣诞节, 我们想不想给自己做一个圣诞礼物呢 ?那么, 首先我们来在网上找出有关圣诞节的素材吧。 怎样快速找到自己需要的素材呢?今天就教您一招 : 用搜索引擎快速检
学情分析
本节课的教学对象为五年级学生,他们已具备一定的计算机操作能力。通过前几节课的学习,学生对网络有了初步的了解,具备了一定的上网操作能力。但部分学生由于刚开始接触网络,还是无法利用网络为自己有效服务,他们需要在与老师和同学们的互动帮助中学习新知识;另外一些操作能力较强的学生已经学会了网上查找信息的基本方法,但查找速度和准确性偏低,没有掌握如何更好地选择搜索关键词,教师除了要引导他们对自己的搜索方法进行改善外,还要使他们在协助学习的过程中更加巩固自己原有的知识。
小A自信心学生 从大V 海南区一小 教学设计
课题
第3课 查找信息
备课时间
2020.9.5
主备人
王照英
课时
1课时
课型
新授
讲课时间
教材分析
网络已是当今学生学习生活当中必不可少的好帮手,也是学生的重要知识来源之一。因此,掌握如何在网上查找信息对于每个学生来说都是至关重要的。 本节课内容选自电子工业出版社小学信息技术教材五年级上册第一单元“计算机网络”中的第3课“查找信息”。“查找信息”章节主要包括使用浏览器浏览网页、利用搜索引擎查找信息、使用搜索引擎的技巧三部分,本节课将重点指导学生认识搜索引擎,学会如何利用关键词搜索法在网上快捷、精准地查找自己所需的信息,课时安排为一节课。
百度十大搜索技巧
集 比较多的同行网站。
例如:网站友情链接平台,他们所用到的系统和源代码都是一致的, 那么我们在查找用这一源代码的网站时就好多了,我们
说你要查询苹果和雪梨时,可以用 “苹果| 雪梨”来搜 索,无需分两次查询,就会提供跟“|”前后任何相关关键词
3、十大搜索技巧(三)——intitle 解释 :intitle的作用是把搜索范围限定在网页标题中 使用方法: 把查询内容中,特别关键的部分用“intitle “友情 inurl:特定url” 等等可以查到很多你想
要的信息, 大家都知道我们在使用搜索内容时,很多时候会被拆分掉。双
引号和书名号的作用是将搜索范围更精确地指定到所要查的内 容中,
可以更精准的找到你想要的信息。 例如:1.你想要查找“网站内锚文本”这个词的相关内容时,可以用“'网 站
内部锚文本'”来做搜索内容,这样的话你的关键词就不会被 拆分开!
2.我们想要找“爱情”这部电影的资料,但是你在搜索“爱 情”时
它会出现很多无关的网页,此时,料 解释:很多有价值的资料,在网上并非都是网页的形式,有的是以word、
例如: 1)“让子弹飞 正在连接” 2)“让子弹飞 开始连接” 3)“让子弹飞 (开 解释:『』是直行双引号。 检索式形式如:『论坛版块名称』 实例:『seo交流』 注意:这个直行”『』“怎么输入呢?调出中文输入法,选 择“软键盘”——“标点符号”,就能找相关的资料的“-”功能 例如:“A -B” 意思就是说想在搜索A的同时屏蔽关于B的信息。 注意索功能 。 例如:“A | B” 意思是想要搜索包含A的信息或者包含B的信息。比 方
才可以,否则无效!8、十大搜索技巧(八)——“开始连接”、“正在连接” 用 于搜
搜索引擎的一般查询规则
6.3搜索引擎的一般查询规则利用搜索引擎既可以检索出Internet上的文献信息,还可以查找到公司和个人的信息;既可以通过输入单词、词组或短语进行检索,还可以使用逻辑算符及位置算符等对多个词进行组合检索;既可以以词语查询有关主题的页面信息,也可以以特定的域名、主机名、URL等查找有关的网站信息。
搜索引擎是基于一些基本的查询规则来实现这些查询条件的,但各个搜索引擎所采用的查询规则又不尽相同。
下面介绍的是常用的一般查询规则。
1. 布尔逻辑算符(1) 逻辑“与”逻辑“与”一般用“AND”表示,有的搜索引擎还可以用“&”表示。
使用逻辑“与”是为了要求检索结果的Web页面中同时出现所有输入的检索词,提高查准率。
(2) 逻辑“或”逻辑“或”一般用“OR”表示,有的搜索引擎还可以用“|”表示。
使用逻辑“或”是为了允许检索结果的Web页面中出现输入检索词的任何一个,提高查全率。
(3) 逻辑“非”逻辑“非”一般用“NOT”表示,有的搜索引擎还可用“!”表示。
使用逻辑“非”是为了要求检索结果的Web页面中出现NOT前的检索词,但排除含有NOT后的检索词的页面信息,以缩小检索范围。
2. 连接符连接符有加号(+)和减号(-)。
(1) 在检索词前使用“+”时,表示所有检索结果的页面中都必须包含该词。
例如:检索式“+A+B”,表示查得的页面中应出现“A”和“B”方面的信息;而检索式“A+B”,则表示在检索结果页面中一定含有“B”,但不一定有“A”的信息。
(2) 检索词前使用“-”时,表示任何检索结果的页面中都不能包含该词。
例如:检索式“microwave-ceramic”,则表示查找关于microwave的页面,但排除那些和ceramic有关的页面。
3. 截词符截词符一般用星号(*)表示。
当“*”置于一个词的未尾时,表示将相同词干的词全部检索出来。
例如;检索式“compu*”,则表示可以检索到computer、computing、compulsion等词。
通过IP查找所在交换机
在一个Cisco 交换网络中间,已知某台机器的IP地址,如何找出它连接到了哪台交换机的哪个端口上呢?最方便快捷的方法使使用CiscoWorks 2000 LMS网管软件的User tracking 功能,图形化界面,一目了然。
如果没有这个软件,也可以使用以下手工分析方法来找出答案: 示例网络:核心交换机为6509(交换引擎SE用CatOS, MSFC运行IOS软件) 1. 找出该IP所对应的MAC地址: 通过查看系统的ARP缓存表可以找出某IP所对应的MAC地址。由于ARP不能跨VLAN进行,所以连接各个VLAN的路由模块MSFC就是最佳的选择--一般它在每一个VLAN都有一个端口(interface vlan n),能正确地进行ARP解释。
6509MSFC#ping 10.10.1.65 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.10.1.65, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms 6509MSFC#show arp | in 10.10.1.65 Internet 10.10.1.65 2 0006.2973.121d ARPA Vlan2
通过以上命令,我们知道10.10.1.65的MAC地址是0006.2973.121d, 这是IOS设备的MAC地址表达方式,在CatOS中,应写为00-06-29-73-12-1d.
2.在交换机上找出MAC地址所对应的端口 6509SE> (enable) show cam 00-06-29-73-12-1d * = Static Entry. + = Permanent Entry. # = System Entry. R = Router Entry. X = Port Security Entry $ = Dot1x Security Entry
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
陕西科技大学实验报告 班级: 学号: 姓名: 实验组别: 实验日期: 报告日期: 成绩: 报告内容:(目的和要求、原理、步骤、数据、计算、小结等)
实验四 查找 一、实验目的 1.掌握各种不同查找算法的思想及高级语言程序实现。 2.掌握二叉排序树的查找、插入、删除算法的思想及程序实现。
二、实验要求 1.掌握查找的不同方法,图的邻接矩阵和邻接表存储结构。 2.掌握二叉排序树的构造和查找方法。
三、实验原理(流程图):
四、实验数据(源代码): package D_Search; 附页 2 import java.util.Scanner; import D_Sort.KeyType; import D_Sort.RecordNode; import D_Sort.SeqList;
public class SearchDemo { /** * 在主函数中设计一个简单的菜单,分别调试 */ static SeqList ST = null; public static void createSearchList() throws Exception{ int maxSize = 20; ST = new SeqList(maxSize); int curlen; Scanner s = new Scanner(System.in); System.out.print("请输入要创建表长度:"); curlen = s.nextInt(); KeyType[] k = new KeyType[curlen]; System.out.print("请输入表序列:"); for(int i=0;ik[i] = new KeyType(s.nextInt()); } for(int i=0;iRecordNode r = new RecordNode(k[i]); ST.insert(ST.length(), r); } } public static void main(String[] args) throws Exception{ //1.创建顺序查询表 createSearchList(); Scanner s = new Scanner(System.in); System.out.print("请输入要查找的关键字:"); KeyType key1 = new KeyType(s.nextInt()); KeyType key2 = new KeyType(s.nextInt()); System.out.println("拆分法查找: "+key1.getKey()+" = "+ST.binarySearch(key1)); System.out.println("拆分法查找: "+key2.getKey()+" = "+ST.binarySearch(key2)); //2.利用二叉排序树的插入算法建立二叉排序树 BSTree bsTree = new BSTree(); int[] k = {50,13,63,8,36}; String[] element = {"关羽","张飞","赵云","马超","黄忠"}; KeyType[] key = new KeyType[k.length]; System.out.println("原二叉排序树序列:"); 附页 3 for (int i = 0; i < k.length; i++) { key[i] = new KeyType(k[i]);//创建关键字对象 if (bsTree.insertBST(key[i], element[i])) { System.out.print("{"+key[i]+","+element[i]+"}"); } } System.out.print("\r请输入要删除的关键字值:"); int q = s.nextInt(); KeyType keyvalue = new KeyType(); keyvalue.setKey(q);//要删除的关键字值 RecordNode found = (RecordNode) bsTree.removeBST(keyvalue); if (found != null) { System.out.println("删除关键码: "+keyvalue+" ,成功!对应记录数据为: "+found.getElement()); } else { System.out.println("删除关键码:"+keyvalue+",失败!"); } } }
package D_Search; import B_Stack.LinkQueue; import C_Tree.BiTreeNode; import D_Sort.KeyType; import D_Sort.RecordNode; /** * 二叉排序树 */ public class BSTree { protected BiTreeNode root; public BSTree(){ root = null; }
//二叉排序树插入算法 public boolean insertBST(Comparable key,Object theElement){ if (key == null|| !(key instanceof Comparable)) {//不能插入空对象或者不可比较大小的对象 return false; } if (root == null) { root = new BiTreeNode(new RecordNode(key, theElement));// 附页 4 建立根节点 return true; } return insertBST(root, key, theElement); } private boolean insertBST(BiTreeNode p,Comparablekey,Object theElement){ if (key.compareTo((KeyType) ((RecordNode)p.getData()).getKey()) == 0) { return false;//不插入关键字值重复的节点 } if (key.compareTo((KeyType) ((RecordNode)p.getData()).getKey()) < 0) { if (p.getLchild() == null) {//若p的左子树为空 p.setLchild(new BiTreeNode(new RecordNode(key,theElement)));//建立叶子结点作为p的左孩子 return true; } else {//若p左子树非空 return insertBST(p.getLchild(), key, theElement);//插入到p的左孩子树中 } } else if (p.getRchild() == null) { p.setRchild(new BiTreeNode(new RecordNode(key,theElement))); return true; } else { return insertBST(p.getRchild(), key, theElement); } }
//二叉树删除算法 public Object removeBST(Comparable key){ if (root == null|| key == null|| !(key instanceof Comparable)) { return null; } //在以root为根的二叉树排序树中删除关键字值为elemKey的结点 return removeBST(root,key,null); } private Object removeBST(BiTreeNode p,ComparableelemKey,BiTreeNode parent){//parent是p的父节点 附页 5 if (p!=null) { if (elemKey.compareTo((KeyType) ((RecordNode)p.getData()).getKey()) < 0) {//在左子树中删除 return removeBST(p.getLchild(), elemKey, p);//在左子树中递归搜索 } else if (elemKey.compareTo((KeyType) ((RecordNode)p.getData()).getKey()) > 0) {//在右子树中删除 return removeBST(p.getRchild(), elemKey, p);//在右子树中递归搜索 } else if (p.getLchild() != null&& p.getRchild() != null) {//相等且该节点有左右子树 BiTreeNode innext = p.getRchild();//寻找p在中跟次序下的后继结点innext while (innext.getLchild() != null) { innext = innext.getLchild();//寻找左子树中最左的孩子 } p.setData(innext.getData());//用后继结点替换p return removeBST(p.getRchild(), ((RecordNode)p.getData()).getKey(), p);//递归删除结点p } else { if (parent == null) {//删除根节点,即p == root if (p.getLchild() != null) { root = p.getLchild(); } else { root = p.getRchild(); } return p.getData();//返回被删除结点p } } if (p == parent.getLchild()) {//p是parent的左孩子 if (p.getLchild() != null) { parent.setLchild(p.getLchild());//以p的左孩子树填补 } else { parent.setRchild(p.getRchild()); } } else if (p.getLchild() != null) {//p是parent的右孩子且p的左子树非空 parent.setRchild(p.getLchild()); } else {