第一篇:如何查找文献
免费下载各种学科文献,是学术交流的理想园地
文献密码搜索的方法大全
一、文献密码搜索的方法概述 [font=宋体]Sample Text
文献密码搜索的方法精要总结如下:
1.google是密码搜索的利器
2.标准检索表达式:杂志名(数据库名)+password+username
3.检索表达式的变异(pw,pwd等衍生词)
4.冗余信息的去除(-NEED)
5.密码的区域性问题(site:EDU,KR,TW)
6.文件类型限制
7.INTITTLElink等限制的妙用
8.著名杂志带其他杂志
9.逆向查找:安全,原理简单.但全人工,烦琐,管理和调度技术有待于完善
二、文献缩写-》全名自动查询系统
使用方法:
方法一:
将缩写输入查询框内,按“search”就可以了。注:不需把缩写后的“.”号输入,但每个缩写单词间要空格。
网址: http://jake.openly.com/
方法二:
采用耶尔大学的杂志缩写查询系统:
网址:http://info.med.yale.edu/library/journalfinder/
方法三:
生物工程类杂志缩写专用搜索器:
网址:http://darwin.nmsu.edu/~molbio/bioABACUShome.htm
方法四:
生物医学类杂志缩写专用搜索器:
网址:http://library.med.ohio-state.edu/abrv/
方法五:
Medline杂志缩写专用搜索器:
三、我检索ppt的心得体会
自从学检索以来学到了不少的东西,同时也遇到了不少问题。我现在就对我前一段时间搜索ppt文件时遇到的一些问题讲一讲。请各位高手多指教。
我们在查ppt资料时,一般都想得到与查到的资料相关的全部内容,那我们就需要:
1、对检索到的东西进行层回推,放大信息量。
比如我在google里检索“molecular biology”得到了这样一个网址"http://www.xiexiebang.com.......这是定位于国家或地区,将搜索局限于某些国家或地区,或加上edu,则是这些国家或地区的大学,效果自然更好。如果site:mu.edu.cn则搜索国内医科大学内的资源(会漏综合性大学的资源的,要慎用)。
一般的,欧美人的版权意识强,一般密码不易公布,相反,非洲、美洲、亚洲则往往公开密码,这是获得密码的最重要来源之一,善于利用这些地方的资源有助于提高搜索效率。
这是site两大好处,不可忽视!
第二篇:查找文献体会
在检索论文资料过程中,常用的数据库有以下几个:(做成链接,减少篇幅)
中文数据库类:
CNKI http:///
万方 http://.cn/
外文数据库类:
Sciencedirect http:///
Blackwell http:///
Springer http:///home/main.mpx
Wiely http://www.xiexiebang.com/
NCBI http://)来查询。里面一般会搜出来你要找的文献,在Google学术搜索里通常情况会出现“每组几个”等字样,然后进入后,分别点击,里面的其中一个就有可能会下到全文。
5.如果上面的方法找不到全文,就把文章作者的名字或者文章的title在Google 里搜索(不是Google 学术搜索),用作者的名字来搜索,是因为很多国外作者都喜欢把文章的全文(PDF)直接挂在网上,一般情况下他们会把自己的文章挂在自己的个人主页(home page)上,这样可能也是为了让别的研究者更加了解自己的学术领域,这样你就有可能下到你想要的文献的全文了。第一作者查不到个人主页,就接上面的方法查第二作者。
6.让所在的研究所图书馆的管理员帮忙从外面的图书馆文献传递,不过有的文献可能是收费的。
7.到网络资源上免费求助,如帐号学术资源论坛文献求助获得(http://zhanghao.5d6d.com/bbs.php);如果你需要的文献目前还没有电子版,也可以通过馆藏求助获得全文。在找到中文文献之后,就可以通过其中的英文关键词来查找英文文献。
总的来说,现在获得文献途径很多,越来越太容易,但是对文献的消化吸收严重不够。我们不能变成文献的收集者,要做文献的利用和使用者,研读关键文献,注重基础学习才是关键;要让信息成为财富,关键是消化吸收,而不能成为信息的奴第,图书馆,文献几个G,自己却无一丝长进。
最后,如果大家有兴趣,可以登录帐号学术资源论坛(http://zhanghao.5d6d.com/bbs.php)
更专业的网络资源,在里面系统学习,如文献代理、EZ资源等等。学会了他们,就不会找不到想要的文献,你写的论文就会提升几个等级。
暂时就写这么几点,以后有了再补充,希望对大家有所帮助。
第三篇:如何检索查找国外文献学术论文
如何检索查找国外文献学术论文 2009-03-02 13:57 1。文献数据库
国内主要资源
1。维普 该数据库收录8000余种社科类及自然科学类期刊的题录、文摘及全文。主题范畴为社科类、自然科学类、综合类。年代跨度为1989年至今
2。万方 万方数据资源系统的数据库有百余个,应用最多的主要是包括了专业文献库、中国科技引文库、中国学位论文库、中国期刊会议论文库等。
3。cnki 主要应用包括中国期刊全文数据库、中国优秀博士硕士论文全文数据库、中国重要报纸全文数据库、中国医院知识仓库、中国重要会议论文全文数据库。
4。超星图书馆、书生之家图书馆、中国数字图书馆 国内主要汇集各类图书资源的数据库 国外主要资源
1.SpringerLink 包含学科:化学、计算机科学、经济学、工程学、环境科学、地球科学、法律、生命科学、数学、医学、物理与天文学等11个学科,其中许多为核心期刊。
2.IEEE/IEE 收录美国电气与电子工程师学会(IEEE)和英国电气工程师学会(IEE)自1988年以来出版的全部150多种期刊,5670余种会议录及1350余种标准的全文信息。
3.Engineering Village 由美国Engineering Information Inc.出版的工程类电子数据库,其中Ei Compendex数据库是工程人员与相关研究者最佳、最权威的信息来源。
4.ProQuest 收录了1861年以来全世界1,000多所著名大学理工科160万博、硕士学位论文的摘要及索引,学科覆盖了数学、物理、化学、农业、生物、商业、经济、工程和计算机科学等,是学术研究中十分重要的参考信息源
5.EBSCO数据库 ASP(Academic Search Premier):内容包括覆盖社会科学、人文科学、教育、计算机科学、工程技术、语言学、艺术与文化、医学、种族研究等方面的学术期刊的全文、索引和文摘; BSP(Business Source Premier):涉及经济、商业、贸易、金融、企业管理、市场及财会等相关领域的学术期刊的全文、索引和文摘
6.SCIENCEDIRECT数据库 是荷兰Elsevier Science公司推出的在线全文数据库,该数据库将其出版的1,568种期刊全部数字化。该数据库涵盖了数学、物理、化学、天文学、医学、生命科学、商业及经济管理、计算机科学、工程技术、能源科学、环境科学、材料科学、社会科学等众多学科。
7.OCLC(OnlineComputerLibraryCenter)即联机计算机图书馆中心,是世界上最大的提供文献信息服务的机构之一.其数据库绝大多数由一些美国的国家机构、联合会、研究院、图书馆和大公司等单位提供。数据库的记录中有文献信息、馆藏信息、索引、名录、全文资料等内容。资料的类型有书籍、连续出版物、报纸、杂志、胶片、计算机软件、音频资料、视频资料、乐谱等。
2。文献检索
1)国内期刊报纸全文可以在万方,维普,cnki进行检索,其他专业的数据库也可以;学位论文,可以在万方、cnki检索。专利、标准等文献还是要到相应的数据库进行检索。
2)国外期刊在我以上提供的数据库都可以检索,而学位论文多是在ProQuest数据库进行检索
3。进入数据库方法和思路 1)购买权限,这个不用我废话,理论上这些资源部是**的。查阅时,只能到购买权限的单位,才能进入数据库。或者,如果你有足够的钱的用来烧的话,那你可以购买阅读卡,一切都ok了!
2)采用公共的用户名和密码。这种方法用起来是最好最省事情的,但是搜索可就费时间了。密码来源多是试用形式的,一段时间会过期。取得这种密码,要看你的搜索能力了,有时间我会谈谈搜索经验和大家交流。如果你水平足够高超的话,可以自己研发破解工具,或者使用破解工具进行破解,前一段时间网上超星破解版就是个例子,不过现在很多不能用了。
3)使用高校或者科研单位代理。这种方式挺好,但是对于菜鸟级别的有时就显得有点难以操作了。简单的说,代理服务器的工作机制很象我们生活中常常提及的代理商,假设你的机器为A机,你想获得的数据由B机提供,代理服务器为C机,那么具体的连接过程是这样的。首先,A机需要B机的数据,它与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A 机,完成代理任务。所以能获得好的,快速的高校或者科研院所的代理,你就可以通过这个代理在这些地方寻找你的资料了,不会再出现“ip地址不在允许范围内 “的提示了。
最后说一下,就国内资源,我个人认为,维普期刊好一些,万方也不差,当在cnki遇到麻烦的时候,何必一条路跑到黑?为什么不去万方、维普找你的资料呢?这样充分利用资源,也减轻了所提供的cnki mm的压力。关于检索工具和经验,我今后还会和大家交流的!希望对大家有所帮助!
3。文献检索工具
大家对网络上的搜索工具一定不是很陌生吧?百度,google, 至于其他的新浪、网易搜索就不必再说,我觉得功能有限。
1)百度个人认为百度搜索中文网页能力比较好,而且搜索的很全,便于读者查看。讲正题,我用百度搜学术资源密码也有一些成功的经验。比如说,注意到cnki的很多密码都是才cnkikw,于是我们可以键入cnkikw,搜索密码会出来很多相关网页,都是各大论坛,以及其他网站发布或者转载的账号密码,当然一些是要过期,但是很多还是可以用的,只要你有时间,同时你还有很多意想不到的收获!虽然下了功夫,但是一旦成功是很有成就感的。各位朋友不妨一试!
除了用百度直接搜索密码以外,我们在网上检索一些中文文献的时候会遇到全文的情况,此时要注意顺着地址栏找下去,往往会找到你要的很多文献全文。例如:我找 “有效氯 检测” 时找到这个网址http://www.xiexiebang.com/journals/
欧洲数学会电子图书馆,提供了期刊、会议、论文集、专著、演讲、软件等资源。并提供期刊和电子版图书的全文浏览。非电子版图书提供前言、摘要、目录和书评等内容。特别地,在经典著作栏目内,目前可检索到哈密尔顿和黎曼的经典论文的全文。
Science.gov http://www.xiexiebang.com/
PLOS是一家由众多诺贝尔奖得主和慈善机构支持的非赢利性学术组织,旨在推广世界各地的科学和医学领域的最新研究成果,使其成为一种公众资源,科学家、医生、病人和学生可以通过这样一个不受限制的平台来了解最新的科研动态。PLoS出版了8种生命科学与医学领域的期刊,可以免费获取全文。
Journal of Statistical Software http://www.xiexiebang.com/
由美国统计协会出版的《统计软件杂志》,提供1996年至今20卷的内容。可以免费获取全文。
Social Science Research Network http://www.xiexiebang.com
德国马普学会,该学会创办了3种开放存取杂志:
(1)Living Reviews in Relativity ISSN 1433-8351 http://relativity.livingreviews.org/
(2)Living Reviews in Solar Physics ISSN 1614-4961 http://solarphysics.livingreviews.org/
(3)Living Reviews in European Governance ISSN: 1813-856X http://europeangovernance.livingreviews.org/
Networked Computer Science Technical Reference Library(NCSTRL)http://www.xiexiebang.com/
第四篇:文献综述
前 言
青年一代是祖国的花朵,未来的栋梁。它们婚恋观的取向如何,不仅关系着当代青年今后人生道路的选择,而且也将影响着中国家庭的走向和社会的发展与进步。所以说,对当代青年的婚恋观进行调查研究,分析他们的婚恋观现状和婚恋观存在问题的原因,进而有针对性地引导当代青年树立正确的婚恋观意义重大。笔者在进行此课题的研究之前,查阅了国内外相关文献资料,并将其中一些代表性著作及其观点进行了梳理,为自己的论文写作打好前期基础。下面,笔者就国内外相关研究情况加以罗列分析:
1.国内文献综述
对于大学生婚恋问题的研究,我国起步较晚,但是从20世纪80年代开始,对此课题的研究比较多,研究成果颇为丰富。其理论成果表现在以下几个方面:
①关于婚恋观内涵的研究
刘亚丽在《当代大学生婚恋观特点及引导》中认为,婚恋观指人们对恋爱、婚姻和性的基本问题的看法,是人生观的重要构成因素和具体体现。徐明在《高校大学生婚恋观现状分析》中认为,婚恋观是人们价值观在婚姻、恋爱问题上的体现。冼德庆在《当代青年婚恋观的特点及引导对策》中认为,婚恋观是人们关于恋爱、婚姻问题的基本看法、基本观点和基本态度。张永在《正确的婚恋观是婚姻幸福的基础》中认为,婚恋观是人们在其所处社会历史条件下,对婚恋本质和婚姻幸福的认识和反映,其具体内容具有现实的合理性。金乐在《现代大学生婚恋观教育探析》中认为,婚恋观是人生观的重要组成部分, 其正确与否, 关乎整个人生观的确立。马建青、严立芬在《女研究生婚恋观现状及特点探析》中认为,婚恋观是人们对恋爱和婚姻基础问题的看法,如对恋爱目的、择偶条件、婚姻幸福的标准、性行为等的认识、观点、见解。苏红在《大学生婚恋观结构、特点及影响因素研究》中认为,婚恋观是人们对婚前恋爱、婚姻生活以及婚恋过程中性爱取向的基本看法,它是人们对待婚姻和恋爱的内在标准和主观看法,其不但直接影响个体对配偶的选择,还会影响个体对未来婚姻、家庭的责任和义务的承担。杨艳玲在《当代大学生的婚恋观及其影响因索》中认为,婚恋观是一种社会历史现象,是男女两性间的一种社会关系,包括婚姻和爱情„„婚恋观是价值观在婚姻、恋爱问题上的重要体现,是指人们对男女两性姻缘关系的基本观点和看法,它包括人们对爱情的基本观点(恋爱观),人们对爱人的期望,人们对各种婚姻形式及其变异的看法(婚姻观),人们对性行为的态度(性观念)等方面的内容。
②关于当代青年婚恋观现状研究
学者们普遍从恋爱观、择偶观、婚姻观、性观念等几个方面对大学生婚恋观的现状展开了研究。陈正祥,晏先华,刘鞠在《当代青年婚恋心理探究》中认为:当代青年的婚恋问题日益成为家庭关心、社会关注的热点问题。作者以参加第三届湖北青年相亲文化节现场相亲互动的未婚青年为主体,从性别、年龄层次、参与性、主动性、真诚性、婚恋心理认知、婚恋心理测试、婚恋心理咨询等多方面进行了一次全方位多维度的当代未婚青年婚恋心理调研分析,了解未婚青年的婚恋心理状态,探究心理因素与婚恋现状的关系,为相关部门加强对相亲者正确婚恋观的引导,促进家庭和谐、社会和谐提供参考依据。董晓璐在《当代大学生婚恋观的调查与思考》中认为,当代青年婚恋观现状主要表现为:开放意识与传统观念并存;才子佳人式的配搭仍是理想选择;婚恋方程式逐步复杂化;婚恋观正从白头偕老走向两性自由。黄雪英、王其辉在《对“90 后”大学生性婚恋价值观教育的思考》中认为,“90 后”年轻一代婚恋观现状表现为:向往爱情憧憬婚姻但很迷茫;恋爱动机盲目化的趋势更为突出;选择恋爱对象的标准更为物质化;恋爱责任感严重缺乏;婚姻观更为前卫;性观念更为超前开放,但性心理不成熟、性知识缺乏。段塔丽在《高校校园文化建设中大学生婚恋价值观取向的成因及干预性策略——以西安市三所高校为例》中认为,当代青年婚恋观现状表现为:大学生谈恋爱已成为高校校园文化生活中的一种普遍现象;青年婚恋价值观趋于开放,传统伦理道德观日趋淡化;当代青年择偶重视个人素质和能力,轻视家庭条件,青年婚恋价值取向注重自我发展和个人价值实现;对待婚恋重视恋爱过程,轻视恋爱结果。
③关于当代青年婚恋观形成原因的研究
关于当代青年婚恋观成因的研究,主要集中在家庭、学校、社会、自身等几个方面。李勃在《“80后”青年婚恋选择特点及影响因素分析》中认为当前青年婚恋观的形成主要源于市场经济的施行发展及传统文化向现代文化的转变两大因素的影响。陈小琼、崔小璐在《大学生婚恋观对高校德育工作的影响及对策》中认为,当代青年婚恋观形成的原因主要有:自我主体意识增强;社会道德评价弱化;学校德育工作疏忽;社会环境的影响。刘洪波在《房价翻动了城市青年的婚恋奶酪》中认为:房子对婚恋的影响由潜在的因素成为显性的因素,并成为青年婚恋中的权重指标,影响着城市青年的择偶、婚恋观以及婚姻生活。向欣在《对当代大学生婚恋观教育的思考》中认为,青年婚恋观形成的原因有:社会因素、个体因素、学校教育因素、家庭教育因素。蔡宜旦在《大学生婚恋观变化比较研究》中认为,大学生婚恋观形成的原因有:大学生生理和心理的发展;社会环境、生存空间的推波助澜;群体性社会心理因素的影响;压抑感释放的需要;高校扩招和后勤服务滞后的结果;校方对大学生恋爱采取消极政策。
④关于引导当代青年{在此特指大学生)树立正确婚恋观的研究
关于引导当代青年树立正确婚恋观的研究,学者们主要从家庭、学校、社会展开研究。薛存科在《当代青年婚恋观教育对策探析》中认为,对当代青年进行婚恋观教育的对策有:高度重视和充分发挥家庭和社会的作用;主动创设良好校园生态;切实构建针对性教育体系。黄雪英、王其辉在《对“90 后”大学生性婚恋价值观教育的思考》中认为,改善高校“90 后”大学生性婚恋观教育的措施有:加强认识开展性婚恋观教育的必要性,更新教育理念;丰富性婚恋观教育内容,紧密联系实际;拓展性婚恋观教育的渠道和方法。李艳文、贺伟在《大学生婚恋观现状研究》中认为,培养正确婚恋观的途径是:婚恋观教育内容和目标的层次性;增强教育的参与性与实践性;注重社会的广泛参与;个性化与个体性教育。万顺国在《刍议当代大学生的婚恋观》中认为,帮助大学生树立正确婚恋观的对策有:加强道德教育、法律教育和婚恋观教育,培养高尚的婚恋道德;注重学校、社会、家长群体的紧密配合和德育环境的优化;注重全面把握学生个性;关注高校大学生网络婚恋道德教育;加强校园文化建设,营造良好的校园文化氛围。
国外文献综述
国外对青年婚恋观的研究主要集中在青年婚恋观现状及影响青年婚恋观的因素等方面:
① 国外青年婚恋观现状的研究
Knox & Zusman 研究显示,恋爱在高校中是比较普遍的,83%的大学生处于恋爱期;而且有 2/3 的人认为爱情是婚姻的基础,没有爱情的婚姻是不幸福的,如果没有爱情,他们即便结婚也要离婚。
Paige D Martin 研究表明,1/3 的年轻人对婚前性行为持积极态度,约有 1/2的年轻人对同居持积极态度,但是绝大多数年轻人把婚姻作为一生的责任。Salts、Connie J 等人的研究表明,女生对婚姻的态度比男生更积极。
Rachel SaulLacey、Alan Reifman 等人研究表明,持有不同性态度的人在选择伴侣时会有不同的选择,性态度较为开放的人会注重对方的外貌,性态度较为传统的人会注重对方的个性品质。
② 当代青年婚恋观影响因素的研究
White and D eB lassie、Feigenbaumtal、Haffner、Hetyerington etal、Horn 等人的研究结果相似,他们认为年龄、性别、信仰、来自的家庭(是破裂的或是完整的)、父母的交流、同胞群体的关系及数量、社会政策、个性品质等因素影响着年轻人的性态度与行为。Salts、Connie J、Hil、lwalters and Parker 等人的研究结论比较一致,他们认为女生的婚姻态度比男生有利。Kahnand London 研究认为人的个性影响婚姻观,对婚姻态度比较保守的人与对婚姻态度比较开放的人相比较而言,更强调婚姻的责任,并且婚前性行为、离婚率较低。总之,国外研究者发现影响婚恋观的因素包括:个人因素,如年龄、性别、受教育程度、个性等;家庭因素,如家庭成员的构成及沟通情况、父母的婚姻状况、父母对子女的教养方式等;社会因素,如社会政策、社会文化、经济地位等。
综上所述,上述己有研究对当代青年婚恋观的概念、状况、影响因素进行了一些初步的、有益的研究,取得了一定的成果。以上国内外的研究经验也为我们的课题研究提供了宝贵的经验。但已有的研究只是从婚恋观的某一方面进行研究,比如择偶问题、性观念等,实证的、深层次的、系统的、较为全面的研究是比较少见的。不是十分全面,具有一定的局限性。而且都侧重于发现问题,却一定程度上忽略了找出解决问题的具体办法。因此,本文试图从什么是婚恋以及什么是婚恋观入手,揭示当代大学生婚恋观现状,分析当代青年婚恋观存在问题的原因,进而引导当代青年树立正确的婚恋观,力争对当代青年婚恋观形成比较全面、系统的研究。
参考文献:
(1)BranrlA‘KnoxD&zusmanME.whenAnwhyGenderDiffereneesInsaying‘ILoveYou”AmongCollegeStudents[J].CollegeStudentsjournal.2002,36.(2)刘洪波.房价翻动了城市青年的婚恋奶酪[J].中国青年研究,2008(04).(3)李勃.“80后”青年婚恋选择特点及影响因素分析[J].山东省青年管理干部学院学报,2008(06).(4)陈正祥,晏先华,刘鞠.当代青年婚恋心理探究[J].思想政治教育研究,2009年第2期.(5)刘亚丽.当代大学生婚恋观特点及引导[J].思想教育研究 ,2003,(10).(6)黄雪英,王其辉.对90后大学生性婚恋价值观教育的思考[J].传承,2009年第10期.(7)薛存科.当代大学生婚恋观教育对策探析[J].《新西部,2010年06期.(8)徐安琪,叶文振.中国婚姻研究报告[M].中国社会科学出版社, 2002.(9)杨君.改革开放以来青年婚恋价值观比较研究[D].天津商业大学,2012.(10)刘长春.“80年后”青年婚恋选择问题的伦理分析[D].华中师范大学,2007年04期.(11)王东.当代大学生的婚恋价值观研究[J].《中国青年研究》,2011年05期.(12)种道平.近十余年我国青年择偶标准研究述评[J].青年研究,2003年02期.(13)闫玉.当代中国婚姻伦理的演变与合理导向研究[D].吉林大学,2008年.(14)丁喜龙.大学生婚恋观的现状分析与应对性教育研究[D].大连海事大学,2007年.(15)王良.当代青年人生追求特点的心理分析与对策[J],青年探索,1998(01).(16)苏红.大学生婚恋观结构、特点及影响因素研究[D].重庆:西南大学硕士学位论文,2006,5.(17)刘国军.当代中国社会转型期的价值观念冲突问题研究[D].东北师范大学硕士学位论文,2002,5.(18)刘艳军.全球化对我国当代青年价值观的影响[D].首都师范大学硕士论文,2002.
第五篇:查找 实验报告
实验六
查找
实验目的:
掌握几种查找的思想及算法 问题分析:
(一)顺序查找 1.查找思想
从表的一端开始逐个将记录的关键字和给定K值进行比较,若某个记录的关键字和给定K值相等,查找成功;否则,若扫描完整个表,仍然没有找到相应的记录,则查找失败。2.算法实现
int Seq_Search(SSTable ST,int key){
int p;
} ST.data[0].key=key;/* 设置监视哨兵,失败返回0 */ for(p=ST.length;ST.data[p].key!=key;p--);return(p);
3.算法分析
设查找每个记录成功的概率相等,即Pi=1/n;查找第i个元素成功的比较次数Ci=n-i+1 ; ◆ 查找成功时的平均查找长度ASL:
◆
包含查找不成功时:查找失败的比较次数为n+1,若成功与不成功的概率相等,对每个记录的查找概率为Pi=1/(2n),则平均查找长度ASL:
(二)折半查找
前提条件:查找表中的所有记录是按关键字有序(升序或降序)。
查找过程中,先确定待查找记录在表中的范围,然后逐步缩小范围(每次将待查记录所在区间缩小一半),直到找到或找不到记录为止。1.查找思想
用Low、High和Mid表示待查找区间的下界、上界和中间位置指针,初值为Low=1,High=n。
⑴
取中间位置Mid:Mid=(Low+High)/2 ;
⑵
比较中间位置记录的关键字与给定的K值: ①
相等: 查找成功;
②
大于:待查记录在区间的前半段,修改上界指针: High=Mid-1,转⑴ ; ③
小于:待查记录在区间的后半段,修改下界指针:Low=Mid+1,转⑴ ; 直到越界(Low>High),查找失败。2.算法实现
int Bin_Search(SSTable ST , KeyType k){
int low=1,high=ST.length, mid;
while(low<=high){
mid=(low+high)/2;
if(EQ(ST.data[mid].key, k))
return(mid);
else if(LT(ST.dat[mid].key, k))
low=mid+1;
else high=mid-1;
}
return(0);
/*
查找失败
*/ } 3.算法分析
①
查找时每经过一次比较,查找范围就缩小一半,该过程可用一棵二叉树表示: ◆
根结点就是第一次进行比较的中间位置的记录; ◆ 排在中间位置前面的作为左子树的结点; ◆ 排在中间位置后面的作为右子树的结点;
对各子树来说都是相同的。这样所得到的二叉树称为判定树(Decision Tree)。②
将二叉判定树的第㏒2n+1层上的结点补齐就成为一棵满二叉树,深度不变,h= ㏒2(n+1)。4.算法分析
①
查找时每经过一次比较,查找范围就缩小一半,该过程可用一棵二叉树表示: ◆
根结点就是第一次进行比较的中间位置的记录; ◆ 排在中间位置前面的作为左子树的结点; ◆ 排在中间位置后面的作为右子树的结点;
对各子树来说都是相同的。这样所得到的二叉树称为判定树(Decision Tree)。②
将二叉判定树的第㏒2n+1层上的结点补齐就成为一棵满二叉树,深度不变,h= ㏒2(n+1)。
③
由满二叉树性质知,第i 层上的结点数为2i-1(i≤h),设表中每个记录的查找概率相等,即Pi=1/n,查找成功时的平均查找长度ASL:
当n很大(n>50)时,ASL≈ ㏒2(n+1)-1。
(三)BST树 1.BST树的插入(1)插入思想
在BST树中插入一个新结点x时,若BST树为空,则令新结点x为插入后BST树的根结点;否则,将结点x的关键字与根结点T的关键字进行比较:
① 若相等: 不需要插入;
②
若x.key
若x.key>T->key:结点x插入到T的右子树中。(2)算法实现
递归算法
void Insert_BST(BSTree T , KeyType key){ BSTNode *s;s=(BSTNode *)malloc(sizeof(BSTNode));s->key=key;s->Lchild=s->Rchild=NULL;if(T==NULL)T=s;else { if(EQ(T->key, s->key))return;/* 已有结点
*/ else if(LT(s->key, T->key))Insert_BST(T->Lchild, key);else Insert_BST(T->Rchild, key);
} 非递归算法
void Insert_BST(BSTree T , KeyType key){ BSTNode *s, *p , *f;s=(BSTNode *)malloc(sizeof(BSTNode));s->key=key;s->Lchild=s->Rchild=NULL;if(T==NULL)T=s;else { p=T;
while(p!=NULL)
{
if(EQ(p->key, s->key))return;
f=p;
/*q作为p的父结点
*/
if(LT(s->key, p->key))p=p->Lchild;
else p=p->Rchild;
}
if(LT(s->key, f->key))f->Lchild=s;else f->Rchild=s;} }
利用BST树的插入操作,可以从空树开始逐个插入每个结点,从而建立一棵BST树,算法如下:
#define ENDKEY 65535 BSTree create_BST(){
KeyType key;BSTree T=NULL;scanf(“%d”, &key);while(key!=ENDKEY){
Insert_BST(T, key);scanf(“%d”, &key);} return(T);}
2.BST树的查找
(1)查找思想
首先将给定的K值与二叉排序树的根结点的关键字进行比较:若相等: 则查找成功; ① 给定的K值小于BST的根结点的关键字:继续在该结点的左子树上进行查找; ②
给定的K值大于BST的根结点的关键字:继续在该结点的右子树上进行查找。(2)算法实现
递归算法
BSTNode *BST_Serach(BSTree T , KeyType key)
{
if(T==NULL)return(NULL);else
{ if(EQ(T->key, key))return(T);else if(LT(key, T->key))
return(BST_Serach(T->Lchild, key));
else
return(BST_Serach(T->Rchild, key));} } 非递归算法
BSTNode *BST_Serach(BSTree T , KeyType key){ BSTNode * p=T;while(p!=NULL&&!EQ(p->key, key)){ if(LT(key, p->key))p=p->Lchild;else p=p->Rchild;} if(EQ(p->key, key))return(p);else return(NULL);} 在随机情况下,二叉排序树的平均查找长度ASL和㏒(n)(树的深度)是等数量级的。3.BST树的删除
(1)
删除操作过程分析
从BST树上删除一个结点,仍然要保证删除后满足BST的性质。设被删除结点为p,其父结点为f,删除情况如下: ①
若p是叶子结点: 直接删除p
②
若p只有一棵子树(左子树或右子树):直接用p的左子树(或右子树)取代p的位置而成为f的一棵子树。即原来p是f 的左子树,则p的子树成为f 的左子树;原来p是f 的右子树,则p的子树成为f的右子树
③ 若p既有左子树又有右子树 :处理方法有以下两种,可以任选其中一种。◆
用p的直接前驱结点代替p。即从p的左子树中选择值最大的结点s放在p的位置(用结点s的内容替换结点p内容),然后删除结点s。s是p的左子树中的最右边的结点且没有右子树,对s的删除同②
◆ 用p的直接后继结点代替p。即从p的右子树中选择值最小的结点s放在p的位置(用结点s的内容替换结点p内容),然后删除结点s。s是p的右子树中的最左边的结点且没有左子树,对s的删除同②(2)算法实现
void Delete_BST(BSTree T , KeyType key)
// 在以T为根结点的BST树中删除关键字为key的结点
{ BSTNode *p=T , *f=NULL , *q , *s;while(p!=NULL&&!EQ(p->key, key)){ f=p;//f 指向p的父结点
if(LT(key, p->key))p=p->Lchild;//搜索左子树
else p=p->Rchild;// 搜索右子树
} if(p==NULL)return;
// 没有要删除的结点 s=p;
// 找到了要删除的结点为p
if(p->Lchild!=NULL&& p->Rchild!=NULL)
{ f=p;s=p->Lchild;
// 从左子树开始找
while(s->Rchild!=NULL)
{
f=s;s=s->Rchild;
} // 左、右子树都不空,找左子树中最右边的结点
p->key=s->key;p->otherinfo=s->otherinfo;
// 用结点s的内容替换结点p内容
}
// 将第3种情况转换为第2种情况
if(s->Lchild!=NULL)
// 若s有左子树,右子树为空
q=s->Lchild;else q=s->Rchild;if(f==NULL)T=q;else if(f->Lchild==s)f->Lchild=q;
else f->Rchild=q;free(s);}
(四)哈希查找
1.基本思想:在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法。2.哈希函数 除留余数法
取关键字被某个不大于哈希表表长m的数p除后所得余数作哈希地址,即H(key)=key
MOD p
(pm)3.冲突处理
★链地址法(拉链法)
方法:将所有关键字为同义词(散列地址相同)的记录存储在一个单链表中,并用一维数组存放链表的头指针。
设散列表长为m,定义一个一维指针数组: RecNode *linkhash[m],其中RecNode是结点类型,每个分量的初值为空。凡散列地址为k的记录都插入到以linkhash[k]为头指针的链表中,插入位置可以在表头或表尾或按关键字排序插入。(1)链地址法查找
int Hash_Insert2(HTNode *T[ ], HTNode *s, int m)
{ HTNode *p=Hash_Search(T,s->key,m);
if(p!=NULL)
return 0;
//表中已有该结点
else {
d=h(s->key);
s->next=T[d];
T[d]=s;
return 1;
//插入成功
}
}
(2)链地址法插入
typedef struct node { KeyType key;struct node *next;}HTNode;
HTNode *hash_search2(HTNode *T[ ], KeyType k){ HTNode *p;
int i;p=T[h(k)];while(p!=NULL&&p->key!=k)
p=p->next;return p;} /*用链地址法解决冲突
*/
源程序清单:
#include
int key;char info;}RecType;#define MAX_SIZE 100 typedef struct SSTable{
// 顺序表结构
RecType data[MAX_SIZE];
int length;}SSTable;
typedef struct Node{
//二叉树结构
int key;char info;struct Node *Lchild,*Rchild;}BSTNode;
typedef BSTNode * BSTree;
int Seq_Search(SSTable ST,int key){
//顺序查找
int p;
ST.data[0].key=key;for(p=ST.length;ST.data[p].key!=key;p--);return(p);}
void Bin_Search(SSTable ST,int key){ //折半查找
int low=1,high=ST.length,mid;int i,j,k;
} for(i=1;i if(ST.data[j].key k=j;} if(k!=i){ ST.data[0].key=ST.data[i].key; ST.data[i].key=ST.data[k].key; ST.data[k].key=ST.data[0].key; ST.data[0].info=ST.data[i].info; ST.data[i].info=ST.data[k].info; ST.data[k].info=ST.data[0].info;} } while(low<=high){ mid=(low+high)/2;if(ST.data[mid].key==key)break;else if(ST.data[mid].key //BST树的插入 BSTNode *s,*p,*f;s=(BSTNode *)malloc(sizeof(BSTNode));s->key=key;s->Lchild=s->Rchild=NULL;s->info=info;if(T==NULL)T=s;else{ p=T; while(p!=NULL){ if(p->key==s->key)break; f=p; if(s->key key)p=p->Lchild; else p=p->Rchild; } if(s->key else f->Rchild=s;} return T;} void InorderTraverse(BSTree T){ if(T!=NULL){ InorderTraverse(T->Lchild); printf(“%d,%ct”,T->key,T->info); InorderTraverse(T->Rchild);} } #define ENDKEY 65535 BSTree create_BST(SSTable ST){ //BST树的建立 BSTree T=NULL;int i,key,info;for(i=1;i<=ST.length;i++){ key=ST.data[i].key; info=ST.data[i].info; T=Insert_BST(T,key,info);} return T;} BSTNode *BST_Serach(BSTree T,int key){ if(T==NULL)return(NULL);else{ if(T->key==key)return(T); else if(key return(BST_Serach(T->Lchild,key)); else return(BST_Serach(T->Rchild,key));} } BSTree Delete_BST(BSTree T, int key){ //BST树的删除 BSTNode *p=T,*f=NULL,*q,*s;while(p!=NULL&&(p->key!=key)){ f=p; if(key key)p=p->Lchild; else p=p->Rchild;} if(p==NULL)return T;else s=p;if(p->Lchild!=NULL&&p->Rchild!=NULL){ f=p;s=p->Lchild; while(s->Rchild!=NULL){ f=s;s=s->Rchild; } p->key=s->key;p->info=s->info;} if(s->Lchild!=NULL)q=s->Lchild;else q=s->Rchild;if(f==NULL)T=q;else if(f->Lchild==s)f->Lchild=q;else f->Rchild=q;free(s);return T;} typedef struct node2{ int key;char info;struct node2 *next;}HTNode;HTNode *Hash_Search(HTNode *T[],int key,int m){ //链地址查找 HTNode *p;p=T[key%m];while(p!=NULL&&p->key!=key)p=p->next;return p;} HTNode *Hash_Insert(HTNode *T[],int key,char info,int m){ //链地址插入,建立哈希表 HTNode *s=(HTNode *)malloc(sizeof(HTNode));s->key=key;s->info=info;s->next=NULL;HTNode *p=Hash_Search(T,s->key,m);int d;if(p!=NULL)return *T;else{ d=s->key%m; s->next=T[d]; T[d]=s; } return *T;} void main(){ int a,key,p,i,m;char info;SSTable ST;BSTree T=NULL;BSTNode *s;HTNode *HT[20];HTNode *ht;printf(“1.输入数据n2.顺序查找n3.折半查找n4.BST树的查找n5.BST树的插入n6.BST树的删除n7.链地址法查找n8.链地址法插入n0.退出n”);while(1){ printf(“n请选择:”);scanf(“%d”,&a);getchar();switch(a){ case 1: printf(“请输入记录数量n:”);scanf(“%d”,&ST.length); printf(“请输入除数:”);scanf(“%d”,&m); for(i=0;i<20;i++)HT[i]=NULL;for(i=1;i<=ST.length;i++){ printf(“请输入关键字码与数据:”);scanf(“%d,%c”,&ST.data[i].key,&ST.data[i].info);*HT=Hash_Insert(HT,ST.data[i].key,ST.data[i].info,m);} T=create_BST(ST);printf(“已建立!”);break;case 2:printf(“请输入要查找的关键字码:”);scanf(“%d”,&key);p=Seq_Search(ST,key);printf(“%d,%cn”,ST.data[p].key,ST.data[p].info);break;case 3:printf(“请输入要查找的关键字码:”);scanf(“%d”,&key);Bin_Search(ST,key);break;case 4:printf(“请输入要查找的关键字码:”);scanf(“%d”,&key);s=BST_Serach(T,key);printf(“%d,%cn”,s->key,s->info);break;case 5:printf(“请输入要添加的关键字码及数据:”);scanf(“%d,%c”,&key,&info);T=Insert_BST(T,key,info);printf(“添加后的结果:”);InorderTraverse(T);printf(“n”); } } break;case 6:printf(“请输入要删除的关键字码:”);scanf(“%d”,&key);T=Delete_BST(T,key); printf(“删除后的结果:”);InorderTraverse(T);printf(“n”);break;case 7:printf(“请输入要查找的关键字码:”);scanf(“%d”,&key);ht=Hash_Search(HT,key,m);printf(“%d,%cn”,ht->key,ht->info);break;case 8:printf(“请输入要添加的关键字码及数据:”);scanf(“%d,%c”,&key,&info);*HT=Hash_Insert(HT,key,info,m);for(i=0;i ht=HT[i]; while(ht!=NULL){ printf(“%d,%ct”,ht->key,ht->info); ht=ht->next; } } break;case 0: exit(0);} 运行结果: