第一篇:如何查找文獻
免費下載各種學科文獻,是學術交流的理想園地
文獻密碼搜索的方法大全
一、文獻密碼搜索的方法概述 [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.tmdps.cn.......這是定位于國家或地區,將搜索局限于某些國家或地區,或加上edu,則是這些國家或地區的大學,效果自然更好。如果site:mu.edu.cn則搜索國內醫科大學內的資源(會漏綜合性大學的資源的,要慎用)。
一般的,歐美人的版權意識強,一般密碼不易公布,相反,非洲、美洲、亞洲則往往公開密碼,這是獲得密碼的最重要來源之一,善于利用這些地方的資源有助于提高搜索效率。
這是site兩大好處,不可忽視!
第二篇:查找文獻體會
在檢索論文資料過程中,常用的數據庫有以下幾個:(做成鏈接,減少篇幅)
中文數據庫類:
CNKI http:///
萬方 http://.cn/
外文數據庫類:
Sciencedirect http:///
Blackwell http:///
Springer http:///home/main.mpx
Wiely http://www.tmdps.cn/
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.tmdps.cn/journals/
歐洲數學會電子圖書館,提供了期刊、會議、論文集、專著、演講、軟件等資源。并提供期刊和電子版圖書的全文瀏覽。非電子版圖書提供前言、摘要、目錄和書評等內容。特別地,在經典著作欄目內,目前可檢索到哈密爾頓和黎曼的經典論文的全文。
Science.gov http://www.tmdps.cn/
PLOS是一家由眾多諾貝爾獎得主和慈善機構支持的非贏利性學術組織,旨在推廣世界各地的科學和醫學領域的最新研究成果,使其成為一種公眾資源,科學家、醫生、病人和學生可以通過這樣一個不受限制的平臺來了解最新的科研動態。PLoS出版了8種生命科學與醫學領域的期刊,可以免費獲取全文。
Journal of Statistical Software http://www.tmdps.cn/
由美國統計協會出版的《統計軟件雜志》,提供1996年至今20卷的內容。可以免費獲取全文。
Social Science Research Network http://www.tmdps.cn
德國馬普學會,該學會創辦了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.tmdps.cn/
第四篇:文獻綜述
前 言
青年一代是祖國的花朵,未來的棟梁。它們婚戀觀的取向如何,不僅關系著當代青年今后人生道路的選擇,而且也將影響著中國家庭的走向和社會的發展與進步。所以說,對當代青年的婚戀觀進行調查研究,分析他們的婚戀觀現狀和婚戀觀存在問題的原因,進而有針對性地引導當代青年樹立正確的婚戀觀意義重大。筆者在進行此課題的研究之前,查閱了國內外相關文獻資料,并將其中一些代表性著作及其觀點進行了梳理,為自己的論文寫作打好前期基礎。下面,筆者就國內外相關研究情況加以羅列分析:
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
(p?m)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);} 運行結果: