鍋爐工況遠程查詢系統(tǒng)科技查新報告及構(gòu)建一棵二叉排序樹的C程序的設(shè)計_第1頁
鍋爐工況遠程查詢系統(tǒng)科技查新報告及構(gòu)建一棵二叉排序樹的C程序的設(shè)計_第2頁
鍋爐工況遠程查詢系統(tǒng)科技查新報告及構(gòu)建一棵二叉排序樹的C程序的設(shè)計_第3頁
鍋爐工況遠程查詢系統(tǒng)科技查新報告及構(gòu)建一棵二叉排序樹的C程序的設(shè)計_第4頁
鍋爐工況遠程查詢系統(tǒng)科技查新報告及構(gòu)建一棵二叉排序樹的C程序的設(shè)計_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

科技查新報告項目名稱:鍋爐工況遠程查詢系統(tǒng)委托單位:蘭州鐵路局科研技術(shù)監(jiān)督所委托人:委托日期:甘肅省科學技術(shù)情報研究所查新機構(gòu):甘肅省科技查新檢索咨詢中心

查新項目名稱中文:鍋爐工況遠程查詢系統(tǒng)英文:查新機構(gòu)名稱甘肅省科學技術(shù)情報研究所通訊地址甘肅省蘭州市平?jīng)雎?**號郵政編碼負責人電話傳真聯(lián)系人電話電子信箱及網(wǎng)址查新目的成果鑒定項目的科學技術(shù)要點鍋爐房是每個單位中成本支出的大戶,當前,鍋爐房的管理在我國還是傳統(tǒng)的管理方式,現(xiàn)場的情況管理者只能到達現(xiàn)場后才能了解,但也只能了解一些皮毛的東西,日常生產(chǎn)過程的情況不可能班班跟班去了解,這樣就使得管理者往往靠經(jīng)驗去管理,不僅不符合管理的要求,也容易出現(xiàn)管理上的漏洞。我們研發(fā)的《鍋爐工況查詢系統(tǒng)》,解決了鍋爐工況不能隨時查詢的問題,并于2011年10月份成功應(yīng)用于蘭州鐵路局牟家莊鍋爐房,至今系統(tǒng)運行可靠、穩(wěn)定,效果良好。該系統(tǒng)的組成:該系統(tǒng)由鍋爐工況數(shù)據(jù)查詢、燃煤使用數(shù)據(jù)查詢和現(xiàn)場視頻查詢?nèi)糠纸M成,鍋爐工況數(shù)據(jù)包括爐膛溫度、回水溫度、出水溫度、爐膛壓力、鍋筒壓力、出水壓力、引風控制、鼓風控制和爐排控制,燃煤使用數(shù)據(jù)包括每臺鍋爐的日使用量、總使用量和鍋爐房的使用量、總使用量,燃煤上煤的情況等?,F(xiàn)場視頻包括現(xiàn)場實時視頻和任意時間的視頻錄像查詢。該系統(tǒng)原理:利用力控組態(tài)軟件讀取燃煤計量和鍋爐工況數(shù)據(jù)并保存在SQL數(shù)據(jù)庫中,視頻信號采集后保存在視頻錄像機內(nèi),工控機和視頻錄像機通過寬帶設(shè)備接入局域網(wǎng)內(nèi),客戶端計算機利用IE瀏覽器對數(shù)據(jù)進行查詢。該系統(tǒng)功能及特點:1、鍋爐燃煤分倉使用量存儲。燃煤經(jīng)過計量裝置產(chǎn)生的數(shù)據(jù),依據(jù)犁煤器狀態(tài),計入對應(yīng)鍋爐的用煤量,存入SQL數(shù)據(jù)庫內(nèi)。2、鍋爐燃煤使用量查詢。利用IE瀏覽器打開工控機工作網(wǎng)站,可以查詢每臺鍋爐當日燃煤使用量和任一時間段的燃煤使用量,也可以查詢整個鍋爐房當日燃煤使用量和任意時間段的燃煤使用量。3、鍋爐燃煤上煤情況查詢。利用IE瀏覽器打開工控機工作網(wǎng)站,主界面內(nèi)動態(tài)顯示各倉犁煤器狀態(tài)、上煤速度、日燃煤使用量和總?cè)济菏褂昧浚跀?shù)據(jù)查詢頁面內(nèi)可以查詢上煤開始、結(jié)束時間及當時計量儀表數(shù)值,各倉犁煤器動作時間及當時計量儀表數(shù)值。4、工控機與儀表之間采用485方式進行連接,實現(xiàn)了工控機與多臺鍋爐溫度、壓力及控制儀表相互之間的數(shù)據(jù)傳輸。5、鍋爐溫度、壓力及控制信息查詢。利用IE瀏覽器打開系統(tǒng)網(wǎng)站,可以查詢?nèi)我粶囟取毫翱刂菩畔⒌漠斍皵?shù)據(jù)及歷史數(shù)據(jù),并可以根據(jù)歷史數(shù)據(jù)畫出數(shù)據(jù)曲線圖。6、現(xiàn)場作業(yè)視頻圖像監(jiān)控。利用IE瀏覽器打開視頻錄像設(shè)備,可以對當前畫面進行監(jiān)控,也可以查詢?nèi)我粫r間段的視頻錄像。7、組網(wǎng)方式簡單。利用原有固定電話線,采用寬帶撥號設(shè)備,輕松接入局域網(wǎng)內(nèi)。查新要點與查新要求1、SQL數(shù)據(jù)庫存儲鍋爐工況數(shù)據(jù)2、力控組態(tài)軟件用于鍋爐工況遠程查詢3、IE瀏覽器用于監(jiān)控鍋爐房生產(chǎn)現(xiàn)場要求對以上查新點進行國內(nèi)新穎性查證。四、文獻檢索范圍及檢索策略計算機檢索:1.中文科技期刊數(shù)據(jù)庫1989-至今2.中國期刊全文數(shù)據(jù)庫1994-至今3.中國學位論文數(shù)據(jù)庫1990-至今4.中國學術(shù)會議論文數(shù)據(jù)庫1987-至今5.中國科學技術(shù)成果數(shù)據(jù)庫1987-至今6.中國專利文摘數(shù)據(jù)庫1985-至今7.中國標準文獻數(shù)據(jù)庫1985-至今8.萬方科技信息子系統(tǒng)1985-至今9.國家科技圖書文獻中心1985-至今10.中國知識資源總庫——CNKI系列數(shù)據(jù)庫-至今11.中國國防科技信息中心文獻服務(wù)系統(tǒng)-至今12.Internet網(wǎng)絡(luò)信息資源-至今檢索詞:#1鍋爐工況#2遠程查詢#3SQL數(shù)據(jù)庫#4力控#5組態(tài)軟件#6IE瀏覽器檢索式:#1and#2#1and#2and(#3or#6)#1and#2and#4and#5五、檢索結(jié)果受用戶委托,在上述數(shù)據(jù)庫、網(wǎng)絡(luò)資源及檢索刊物中,采用上述檢索策略,對課題“鍋爐工況遠程查詢系統(tǒng)”進行了科技文獻檢索,檢到主要國內(nèi)相關(guān)文獻12篇,具體內(nèi)容如下:鍋爐多級網(wǎng)絡(luò)監(jiān)測系統(tǒng)設(shè)計與實現(xiàn)【作者】:胡佰龍;周一卉【機構(gòu)】:大連理工大學化工機械學院;【出處】:自動化儀表2012年01期【摘要】:鍋爐的安全使用和管理直接關(guān)系到人們的生命財產(chǎn)安全,為此提出了一種基于Internet和組態(tài)軟件的多級網(wǎng)絡(luò)鍋爐實時監(jiān)測系統(tǒng)。分別闡述了系統(tǒng)的軟硬件組成、工作原理及其技術(shù)特點。以力控組態(tài)軟件為開發(fā)平臺,結(jié)合互聯(lián)網(wǎng)技術(shù)、數(shù)據(jù)庫技術(shù)和網(wǎng)絡(luò)安全技術(shù),構(gòu)建了鍋爐多級網(wǎng)絡(luò)實時監(jiān)測系統(tǒng)。該系統(tǒng)實現(xiàn)了鍋爐現(xiàn)場、市級和省級諸多相關(guān)部門對大范圍鍋爐集群的運行狀況、污染物排放數(shù)據(jù)的監(jiān)測與管理。一種鍋爐房能耗監(jiān)測與分析系統(tǒng)的解決方案/data/html/2011-8-11/92635.html簡介:能耗監(jiān)測系統(tǒng)的自動計量裝置所采集的能耗數(shù)據(jù),通過RS485接口,并采用TCP/IP通信協(xié)議自動并實時上傳給數(shù)據(jù)中心,以保證數(shù)據(jù)得到有效的管理和支持高效率的查詢服務(wù),同時數(shù)據(jù)傳輸采取一定的編碼規(guī)則,實現(xiàn)數(shù)據(jù)組織、存儲及交換的一致性。過程數(shù)據(jù)庫:是系統(tǒng)的核心部分,是用戶與遠端鍋爐房現(xiàn)場設(shè)備通信的樞紐。數(shù)據(jù)庫存儲過程的實質(zhì)就是部署在數(shù)據(jù)庫端的一組定義代碼以及SQL.將常用的或很復(fù)雜的工作,預(yù)先用SQL語句寫好并用一個指定的名稱存儲起來,那么以后要叫數(shù)據(jù)庫提供與已定義好的存儲過程的功能相同的服務(wù)時,只需調(diào)用execute,即可自動完成命令??蛻舳耍翰捎肂\S結(jié)構(gòu),客戶端不需要在計算機上安裝任何軟件,IE會自動下載服務(wù)器端瀏覽控件??蛻舳司哂袛?shù)據(jù)顯示、查詢、打印等與服務(wù)器人機界面同等的功能。運行模式:系統(tǒng)運行模式為B/S結(jié)構(gòu),查詢功能在客戶端無須安裝軟件,只要具有網(wǎng)絡(luò)瀏覽器IE即可使用。稠油熱采鍋爐遠程監(jiān)測系統(tǒng)的方案設(shè)計【作者】:張明岳于云華時海濤【單位】:中國石油大學(華東)信息與控制工程學院【期刊】:化工自動化及儀表2011,38(10)【關(guān)鍵詞】:熱采鍋爐GPRS數(shù)據(jù)管理與發(fā)布遠程監(jiān)測【摘要】:針對勝利油田稠油熱采鍋爐設(shè)備位置分散、人工流動值守等管理特點,并根據(jù)熱采鍋爐的運行控制特點,提出熱采鍋爐遠程監(jiān)測方案.該方案綜合運用GPRS無線通信技術(shù)、SQLServer數(shù)據(jù)庫管理技術(shù)及動態(tài)網(wǎng)頁發(fā)布等現(xiàn)代信息技術(shù),實現(xiàn)了對生產(chǎn)現(xiàn)場遠程數(shù)據(jù)實時監(jiān)測和鍋爐運行工況簡單故障預(yù)警的目的.燃煤電站鍋爐受熱面玷污在線監(jiān)測系統(tǒng)研究【作者】:孫鑫強【單位】:華北電力大學(北京)【學位】:碩士【年份】:2011【期刊】《華北電力大學(北京)》2011年【關(guān)鍵詞】:電站鍋爐在線監(jiān)測玷污人工神經(jīng)網(wǎng)絡(luò)【摘要】:為了滿足節(jié)能減排的需要并提高鍋爐煤種的適應(yīng)性,合理有效的進行吹灰成為電站鍋爐安全經(jīng)濟運行的一個重要方面。本文的目的是將目前的“定時吹灰”改為“按需吹灰”,實時的對鍋爐受熱面的污染情況進行監(jiān)測。本文利用人工神經(jīng)網(wǎng)絡(luò)原理分別對爐膛和對流受熱面進行建模。并對對流受熱面進行實踐仿真,在對流受熱面模型建立的過程中,提出了自行摸索的人工神經(jīng)網(wǎng)絡(luò)應(yīng)用于火力發(fā)電廠的技術(shù)流程。從數(shù)據(jù)采集、過濾,人工神經(jīng)網(wǎng)絡(luò)輸入、輸出量的選擇,人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計,模型的敏感性測試以及網(wǎng)絡(luò)精度驗證等幾個方面進行了詳細介紹,此仿真流程對今后的研究工作具有指導(dǎo)性意義。通過反復(fù)試驗,解決了課題組前期工作中遺留的灰污系數(shù)曲線不符合邏輯規(guī)律的跳躍,數(shù)據(jù)采集過程周期過長等問題,并通過數(shù)據(jù)過濾、輸入量敏感性測試等手段改進了模型的結(jié)構(gòu),從而提高了大幅度仿真精度。以國內(nèi)某300MW機組為研究對象,設(shè)計硬件架構(gòu)和軟件架構(gòu),在Delphi平臺上用ObjectPascal語言開發(fā)了對流受熱面污染實時在線監(jiān)測軟件系統(tǒng),系統(tǒng)應(yīng)用MicrosoftSQL數(shù)據(jù)庫作為數(shù)據(jù)工具,用DLL動態(tài)鏈接庫調(diào)用Matlab神經(jīng)網(wǎng)絡(luò)工具箱進行仿真計算。軟件與數(shù)據(jù)庫的通訊在MicrosoftOS上用ODBC接口進行。使得鍋爐流受熱面的污染情況可視化,并得到實際應(yīng)用,為現(xiàn)場運行人員的吹灰操作提供了合理的指導(dǎo)?;诮M態(tài)軟件和PLC的鍋爐水處理自動監(jiān)控系統(tǒng)【作者】:劉長梅【單位】:大同電力機車有限責任公司動力分廠【出處】:《工業(yè)控制計算機》2006年第9期【關(guān)鍵詞】:MCGS組態(tài)軟件PLC變頻器數(shù)據(jù)采集與控制【摘要】:介紹了集工業(yè)控制計算機、MCGS組態(tài)軟件、PLC、變頻器于一體的鍋爐水處理自動監(jiān)控系統(tǒng)。此系統(tǒng)實現(xiàn)了數(shù)據(jù)的集中管理、自動控制、故障檢測等多方面功能,為鍋爐的連續(xù)、穩(wěn)定、安全運行提供了保證?;诮M態(tài)軟件火電廠實時監(jiān)測系統(tǒng)的開發(fā)王愛軍【作者】:張小桃楊鳳葉【單位】:華北水利水電學院【出處】:《節(jié)能》2008年第3期【關(guān)鍵詞】:經(jīng)濟運行組態(tài)軟件實時監(jiān)測考核管理【摘要】:利用SQL數(shù)據(jù)庫訪問技術(shù),構(gòu)建了組態(tài)王的開發(fā)環(huán)境,開發(fā)了火電廠實時監(jiān)測系統(tǒng)。系統(tǒng)具有趨勢曲線、報警、業(yè)績考核及報袁等功能,實現(xiàn)了機組運行狀況和機組經(jīng)濟性能的實時監(jiān)測。系統(tǒng)的開發(fā)有利于電廠的節(jié)能降耗與管理。用Internet實現(xiàn)鍋爐遠程監(jiān)控【作者】:唐建濤李耿徐國鑫【單位】:新疆克拉瑪依三盛有限責任公司【期刊】:科技創(chuàng)業(yè)家2011,(6)【關(guān)鍵詞】:遠程監(jiān)控Internet智能控制【摘要】:利用Internet技術(shù)解決了鍋爐遠程監(jiān)控,解決鍋爐系統(tǒng)、天然氣系統(tǒng)和循環(huán)水系統(tǒng)存在的故障問題。我們的監(jiān)控主要工作是在Internet網(wǎng)上,使用電腦連接未實現(xiàn)Internet網(wǎng)的遠程監(jiān)控。用個人電腦常用的IE瀏覽軟件就可以實現(xiàn)鍋爐自動化系統(tǒng)的智能控制?;贚abVIEW的鍋爐燃燒遠程監(jiān)控方法研究【作者】:劉貴杰劉立靜唐婷【單位】:中國海洋大學工程學院【期刊】:儀器儀表學報2006,27(z1)【關(guān)鍵詞】:鏈條鍋爐LabVIEWfuzzy-PI復(fù)合控制器遠程監(jiān)控【摘要】:提出了一種基于LabVIEW和Internet的鍋爐燃燒遠程監(jiān)控系統(tǒng)方案。利用fuzzy-PI復(fù)合控制器的優(yōu)化控制算法實現(xiàn)現(xiàn)場控制,通過Internet實現(xiàn)遠端和現(xiàn)場之間的信息交換,并利用開放式圖形化設(shè)計語言LabVIEW開發(fā)平臺構(gòu)建宜人化虛擬故障診斷和控制中心,可以實現(xiàn)鍋爐燃燒系統(tǒng)的遠程監(jiān)控,對于重大或疑難故障請求虛擬診斷中心實現(xiàn)網(wǎng)上專家會診?;贓therNet/IP網(wǎng)絡(luò)的鍋爐遠程監(jiān)控系統(tǒng)設(shè)計【作者】:張立眾馬永翔【單位】:陜西理工學院【期刊】:機床與液壓2011,39(22)【關(guān)鍵詞】:遠程監(jiān)控OPC接口標準ActiveX技術(shù)OPC服務(wù)器OPC客戶端EtherNet/IP【摘要】:構(gòu)建一個基于OPC和ActiveX技術(shù)的鍋爐液位遠程實時監(jiān)控系統(tǒng),闡述了OPC技術(shù)的具體應(yīng)用及OPC中間件技術(shù)在工控系統(tǒng)中的集成實現(xiàn);說明了OPC數(shù)據(jù)存取服務(wù)器和OPC客戶應(yīng)用程序的實現(xiàn)過程;給出了OPC數(shù)據(jù)存取服務(wù)器自動化接口的軟件實現(xiàn)方法,實現(xiàn)了遠程發(fā)布。實驗結(jié)果表明,該系統(tǒng)遠程監(jiān)控功能已實現(xiàn)?;赑STN的鍋爐遠程監(jiān)控系統(tǒng)【作者】:彭悅勇【專業(yè)】:機械電子工程【學位】:碩士【單位】:大連理工大學【導(dǎo)師】:劉欣【年度】:2002【關(guān)鍵詞】:遠程監(jiān)控鍋爐ISA總線接口板虛擬設(shè)備驅(qū)動程序MODEM【摘要】:該文根據(jù)鍋爐生產(chǎn)的特點,參考鍋爐監(jiān)控系統(tǒng)的現(xiàn)狀和發(fā)展趨勢,設(shè)計了基于PSTN的鍋爐遠程監(jiān)控系統(tǒng)。監(jiān)控系統(tǒng)選用工業(yè)控制計算機作為控制中心,操作系統(tǒng)采用Windows98平臺。文中論述了系統(tǒng)軟硬件各部分的設(shè)計思想、總體框架及所涉及到的基本知識,并對某些關(guān)鍵部分的設(shè)計進行了詳細剖析。監(jiān)控系統(tǒng)由一個控制中心和若干個現(xiàn)場節(jié)點組成??刂浦行牡闹饕δ苁潜O(jiān)視各現(xiàn)場節(jié)點的工作狀態(tài),并根據(jù)生產(chǎn)需要合理分配現(xiàn)場節(jié)點的負載、控制現(xiàn)場節(jié)點的工作參數(shù);現(xiàn)場節(jié)點主要對被控設(shè)備的各種參數(shù)進行采集,并通過執(zhí)行機構(gòu)調(diào)整被控設(shè)備的工作狀態(tài),在狀態(tài)參數(shù)超出警戒線時,能夠發(fā)出警報??刂浦行暮同F(xiàn)場節(jié)點均可對鍋爐生產(chǎn)過程的歷史記錄進行查詢??刂浦行暮同F(xiàn)場節(jié)點利用MODEM通過PSTN(公用交換電話網(wǎng))相連,由控制中心主動建立鏈接,現(xiàn)場節(jié)點接到呼叫后應(yīng)答進行數(shù)據(jù)傳輸,從而實現(xiàn)遠距離監(jiān)控的目的。基于WEB數(shù)據(jù)庫的供熱系統(tǒng)管控一體化研究【作者】:王棟【專業(yè)】:控制理論與控制工程【學位】:碩士【單位】:大連海事大學【導(dǎo)師】:汪思源【年度】:2007【關(guān)鍵詞】:WEB數(shù)據(jù)庫供熱系統(tǒng)鍋爐控制決策支持供熱品質(zhì)評價人機和諧管控一體化【摘要】:隨著自動化技術(shù)的發(fā)展,很多供熱鍋爐控制與管理系統(tǒng)都已經(jīng)實現(xiàn)計算機化。但由于種種原因,現(xiàn)實中的鍋爐控制現(xiàn)場許多的監(jiān)測數(shù)據(jù)也還沒有充分發(fā)揮作用。主要表現(xiàn)在對鍋爐的供熱品質(zhì)缺乏量化的評價,以及對鍋爐運行參數(shù)優(yōu)化目標值的設(shè)定缺乏理論依據(jù)。基于對我國目前供熱領(lǐng)域的設(shè)備現(xiàn)狀和人員素質(zhì)的基本認識以及就業(yè)需求,供熱鍋爐的計算機控制管理系統(tǒng)設(shè)計的指導(dǎo)思想應(yīng)該是建立人機和諧的管控一體化系統(tǒng)。其中,決策支持系統(tǒng)<'[10-13>](DSS,DecisionSupportSystem)是其最主要的組成部分。決策支持系統(tǒng)利用供熱鍋爐運行過程中記錄的數(shù)據(jù),通過管理信息系統(tǒng)處理,完成統(tǒng)計、知識發(fā)現(xiàn)、分析、預(yù)測等邏輯功能,為管理者提供決策依據(jù),以管理促進控制,從而提高供熱鍋爐的控制水平??刂扑降奶岣哂挚梢源龠M管理水平的提高。本課題基于實際工程項目,主要設(shè)計研究決策支持系統(tǒng),包括以下兩方面內(nèi)容:1.使用ASP.Net+SQLServer設(shè)計開發(fā)供熱品質(zhì)評價功能。根據(jù)已有的Web數(shù)據(jù)庫,使用控制理論中比較常用的IE和IAE指標對反映供熱品質(zhì)的相關(guān)參數(shù)進行評價,并進行權(quán)系數(shù)分配,得出供熱品質(zhì)的綜合參考得分。該功能通過ASP.Net編程并發(fā)布在Web服務(wù)器端,管理者可通過光線局域網(wǎng)在客戶端通過網(wǎng)絡(luò)瀏覽器進行登陸使用。2.運用數(shù)據(jù)挖掘技術(shù)中的關(guān)聯(lián)規(guī)則方法進行運行優(yōu)化目標值的挖掘。應(yīng)用關(guān)聯(lián)規(guī)則對供熱系統(tǒng)中的歷史數(shù)據(jù)進行數(shù)據(jù)挖掘,通過設(shè)置安全性和經(jīng)濟性指標,挖掘出某個時間段內(nèi)的可達運行優(yōu)化目標值。燃氣鍋爐的運行控制及遠程監(jiān)控系統(tǒng)【作者】:牟岳泰【專業(yè)】:機械制造及其自動化【學位】:碩士【單位】:北京工業(yè)大學【導(dǎo)師】:許東來【年度】:2005【關(guān)鍵詞】:燃氣鍋爐燃燒優(yōu)化模糊控制遠程監(jiān)控【摘要】:為了使鍋爐高效運行,本文著重討論了過量空氣系數(shù)對鍋爐燃燒系統(tǒng)的影響以及實現(xiàn)鍋爐供熱量根據(jù)需求變化的方法。文章采用變頻調(diào)速技術(shù),通過改變系統(tǒng)進氣量,實現(xiàn)燃氣鍋爐的供熱量的變化。本文依據(jù)模糊控制理論,設(shè)計了一種參數(shù)自整定的多級模糊控制器來進行控制,這種算法采用變步長的辦法,能夠適應(yīng)不同工況下的鍋爐系統(tǒng),并且能夠很快的達到控制要求。另外,由于網(wǎng)絡(luò)技術(shù)和通訊技術(shù)的發(fā)展,使我們能夠?qū)﹀仩t進行遠程監(jiān)控,提高鍋爐的安全性,并且降低操作人員工作量,提高管理水平。本課題利用組態(tài)軟件建立起一套遠程監(jiān)控系統(tǒng)。六、查新結(jié)論針對查新項目“鍋爐工況遠程查詢系統(tǒng)”查新點,現(xiàn)將國內(nèi)相關(guān)文獻簡析如下:文獻1報道了一種基于Internet和組態(tài)軟件的多級網(wǎng)絡(luò)鍋爐實時監(jiān)測系統(tǒng),以力控組態(tài)軟件為開發(fā)平臺,結(jié)合互聯(lián)網(wǎng)技術(shù)、SQL數(shù)據(jù)庫技術(shù)和網(wǎng)絡(luò)安全技術(shù),構(gòu)建了鍋爐多級網(wǎng)絡(luò)實時監(jiān)測系統(tǒng)。文獻2報道了一種鍋爐房能耗監(jiān)測與分析系統(tǒng)的解決方案,采用SQL數(shù)據(jù)庫,客戶端采用IE瀏覽器,系統(tǒng)運行模式為B/S結(jié)構(gòu),查詢功能在客戶端無須安裝軟件,只要具有網(wǎng)絡(luò)瀏覽器IE即可使用。文獻3報道了稠油熱采鍋爐遠程監(jiān)測系統(tǒng)的方案設(shè)計,該方案綜合運用GPRS無線通信技術(shù)、SQLServer數(shù)據(jù)庫管理技術(shù)及動態(tài)網(wǎng)頁發(fā)布等現(xiàn)代信息技術(shù)。文獻4報道了燃煤電站鍋爐受熱面玷污在線監(jiān)測系統(tǒng)研究,系統(tǒng)應(yīng)用MicrosoftSQL數(shù)據(jù)庫作為數(shù)據(jù)工具。文獻5報道了基于組態(tài)軟件和PLC的鍋爐水處理自動監(jiān)控系統(tǒng)。文獻6報道了基于組態(tài)軟件火電廠實時監(jiān)測系統(tǒng),利用SQL數(shù)據(jù)庫訪問技術(shù),構(gòu)建組態(tài)王的開發(fā)環(huán)境,開發(fā)火電廠實時監(jiān)測系統(tǒng)。文獻7報道了利用Internet技術(shù)解決鍋爐遠程監(jiān)控,用個人電腦常用的IE瀏覽軟件可以實現(xiàn)鍋爐自動化系統(tǒng)的智能控制。文獻8報道了基于LabVIEW的鍋爐燃燒遠程監(jiān)控方法研究,提出了一種基于LabVIEW和Internet的鍋爐燃燒遠程監(jiān)控系統(tǒng)方案。文獻9報道了基于EtherNet/IP網(wǎng)絡(luò)的鍋爐遠程監(jiān)控系統(tǒng)。文獻10報道了基于PSTN的鍋爐遠程監(jiān)控系統(tǒng)。文獻11報道了基于WEB數(shù)據(jù)庫的供熱系統(tǒng)管控一體化研究。文獻12報道了燃氣鍋爐的運行控制及遠程監(jiān)控系統(tǒng)。綜上所述,同時采用控組態(tài)軟件、SQL數(shù)據(jù)庫、Internet技術(shù)的鍋爐遠程檢測系統(tǒng);應(yīng)用SQL數(shù)據(jù)庫、IE瀏覽器的鍋爐遠程監(jiān)測方案;運用GPRS無線通信技術(shù)、SQLServer數(shù)據(jù)庫管理技術(shù)及動態(tài)網(wǎng)頁發(fā)布等信息技術(shù)的鍋爐遠程檢測系統(tǒng)國內(nèi)分別已有文獻報道。經(jīng)對比,查新項目在鍋爐遠程查詢系統(tǒng)中運用到SQL數(shù)據(jù)庫、力控組態(tài)軟件、IE瀏覽器,國內(nèi)已有相同文獻報道,甘肅省內(nèi)未見相同文獻報道。查新員(簽字):查新員職稱:助理工程師審核員(簽字):審核員職稱:副研究員助理研究員七、查新員、審核員聲明報告中陳述的事實是真實和準確的。我們按照科技查新規(guī)范進行查新、文獻分析和審核,并作出上述查新結(jié)論。我們獲取的報酬與本報告中的分析、意見和結(jié)論無關(guān),也與本報告的使用無關(guān)。查新員(簽字):審核員(簽字):八、附件清單九、備注本報告共9頁。武漢華夏理工學院課程設(shè)計報告書課程名稱:數(shù)據(jù)結(jié)構(gòu)題目:構(gòu)建一棵二叉排序樹的C程序的設(shè)計系名:信息工程學院專業(yè)班級:軟件姓名:指導(dǎo)教師:20**年6月27日課程設(shè)計任務(wù)書設(shè)計題目:構(gòu)建一棵二叉排序樹的C程序的設(shè)計設(shè)計目的1.鞏固和加深課堂所學知識、學會分析研究數(shù)據(jù)對象的特性及數(shù)據(jù)的組織方法;2.選擇的合適數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)以及相應(yīng)操作,實現(xiàn)二叉排序樹的基本操作;3.提高程序設(shè)計能力、加強查閱、運用資料的能力、算法分析與程序設(shè)計素質(zhì)培養(yǎng);設(shè)計任務(wù)(在規(guī)定的時間內(nèi)完成下列任務(wù)) 〔問題描述〕建立一棵二叉排序樹,并完成插入結(jié)點、按值查找結(jié)點位置和顯示等功能?!不疽蟆嘲炊鏄涞牟迦敕椒ǎ纬啥媾判驑渲髂K給出操作菜單,用函數(shù)實現(xiàn)不同功能在主函數(shù)中調(diào)用〔算法提示〕首先設(shè)定二叉樹的二叉鏈表的存儲結(jié)構(gòu):在建立二叉樹時將每一個結(jié)點按左右子樹的規(guī)定形成掛到樹上;按二叉排序樹的特點進行查找,按中序遍歷的方法顯示樹中結(jié)點;具體要完成的任務(wù)是:A.編制完成上述問題的C語言程序、進行程序調(diào)試并能得出正確的運行結(jié)果。B.寫出規(guī)范的課程設(shè)計報告書;時間安排:6月27日7月1日第一天布置題目,確定任務(wù)、查找相關(guān)資料第二天~第四天功能分析,編寫程序,調(diào)試程序、運行系統(tǒng);第五天程序驗收、答辯;撰寫設(shè)計報告。具體要求1.課程設(shè)計報告按統(tǒng)一通用格式書寫,具體內(nèi)容如下:①設(shè)計任務(wù)與要求②總體方案與說明③軟件主要模塊的流程圖④源程序清單與注釋⑤問題分析與解決方案(包括調(diào)式報告,即在調(diào)式過程中遇到的主要問題、解決方法及改進設(shè)想);⑥小結(jié)與體會附錄:①源程序(必須有簡單注釋)②使用說明③參考資料2.每位學生應(yīng)獨立完成各自的任務(wù)且每天至少在設(shè)計室工作半天;指導(dǎo)教師簽名:20**年6月25日教研室主任(或責任教師)簽名:邱珊20**年6月25日目錄1實驗?zāi)康呐c目標 32.問題分析 33.總體設(shè)計 44.具體設(shè)計 54.1遞歸查找算法 54.2非遞歸查找算法 64.3插入算法 74.4二叉排序樹的生成算法 84.5中序遍歷算法 94.6刪除算法 94.7主函數(shù) 104.8注意事項: 115.運行環(huán)境 116.上機調(diào)試 116.1語法錯誤及修改 116.2程序輸出調(diào)整: 136.3時間和空間性能分析: 137.測試結(jié)果及分析 148.用戶使用說明 209.參考文獻 20附錄 211實驗?zāi)康呐c目標一、目的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是學習了數(shù)據(jù)結(jié)構(gòu)課后的一個綜合性實踐環(huán)節(jié),是對課程學習的綜合和補充。通過課程設(shè)計培養(yǎng)學生運用已學過的理論和技能去分析和解決實際問題的能力、加強學生的實踐動手能力和創(chuàng)新能力。二、目標1、結(jié)合c和數(shù)據(jù)結(jié)構(gòu)的理論知識,按要求獨立設(shè)計方案,培養(yǎng)獨立分析和解決實際問題的能力。加強學生的實踐動手能力和創(chuàng)新能力。2、學會查閱資料,熟悉常用算法的用途與技巧。3、認真撰寫課程設(shè)計報告,培養(yǎng)嚴謹?shù)淖黠L和科學態(tài)度。2.問題分析本次程序需要完成如下要求:首先輸入任一組數(shù)據(jù),使之構(gòu)造成二叉排序樹,并對其作中序遍歷,然后輸出遍歷后的數(shù)據(jù)序列;其次,該二叉排序樹能實現(xiàn)對數(shù)據(jù)(即二叉排序樹的結(jié)點)的查找、插入和刪除等基本操作。實現(xiàn)本程序需要解決以下幾個問題:如何構(gòu)造二叉排序樹。如何通過中序遍歷輸出二叉排序樹。如何實現(xiàn)多種查找。如何實現(xiàn)插入刪除等操作。二叉排序樹的定義:其左子樹非空,則左子樹上所有結(jié)點的值均小于根結(jié)點的值。若其右子樹非空,則右子樹上所有結(jié)點的值大于根結(jié)點的值。其左右子樹也分別為二叉排序樹。本問題的關(guān)鍵在于對于二叉排序樹的構(gòu)造。根據(jù)上述二叉排序樹二叉排序樹的生成需要通過插入算法來實現(xiàn):輸入(插入)的第一個數(shù)據(jù)即為根結(jié)點;繼續(xù)插入,當插入的新結(jié)點的關(guān)鍵值小于根結(jié)點的值時就作為左孩子,當插入的新結(jié)點的關(guān)鍵值大于根結(jié)點的值時就作為右孩子;在左右子樹中插入方法與整個二叉排序樹相同。當二叉排序樹建立完成后,要插入新的數(shù)據(jù)時,要先判斷已建立的二叉排序樹序列中是否已有當前插入數(shù)據(jù)。因此,插入算法還要包括對數(shù)據(jù)的查找判斷過程。本問題的難點在于二叉排序樹的刪除算法的實現(xiàn)。刪除前,首先要進行查找,判斷給出的結(jié)點是否已存在于二叉排序樹之中;在刪除時,為了保證刪除結(jié)點后的二叉樹仍為二叉排序樹,要考慮各種情況,選擇正確的方法。刪除操作要分幾種情況討論,在后面有介紹。3.總體設(shè)計用二叉鏈表作為二叉排序樹的存儲結(jié)構(gòu),其中key為結(jié)點關(guān)鍵值,*lchlid、*rchild分別為左右孩子指針。該程序的流程圖所示:節(jié)點是否為0輸入節(jié)點值開始節(jié)點是否為0輸入節(jié)點值開始 N非遞歸查找J=22遞歸查找輸入J=1顯示刪除插入查找退出I=2I=4I=3I=1I=0 輸入i進入主菜單Y非遞歸查找J=22遞歸查找輸入J=1顯示刪除插入查找退出I=2I=4I=3I=1I=0 輸入i進入主菜單總流程圖4.具體設(shè)計首先定義二叉排序樹的數(shù)據(jù)類型如下:typedefstructnode{ intkey;//關(guān)鍵字項 structnode*lchild,*rchild;//左右孩子指針}Bstnode;然后按一定順序來編寫算法程序:4.1遞歸查找算法具體思想如下:(1)若二叉樹為空,則查找失敗。(2)否則,將根結(jié)點的關(guān)鍵值與待查關(guān)鍵字進行比較,若相等,則查找成功;若根結(jié)點關(guān)鍵值大于待查值,則進入左子樹重復(fù)此步驟,否則,進入右子樹重復(fù)此步驟;若在查找過程的中遇到二叉排序樹的葉子結(jié)點時,還沒有找到待查結(jié)點,則查找不成功。if(t==NULL) returnNULL; else{ if(t->data==x) returnt; if(x<t->data) return(Bsearch(t->lchild,x)); else return(Bsearch(t->rchild,x));}二叉排序樹歸查找算法流程圖4.2非遞歸查找算法查找過程是從根結(jié)點開始逐層向下進行的。并定義一個標記量記錄是否找到結(jié)點。Bstnode*searchBST(Bstnode*t,intx){ Bstnode*p;intflag=0;p=t;//定義*p結(jié)點用于逐層查找,叢根結(jié)點開始查找 while(p!=NULL)//二叉排序樹不為空 { if(p->key==x)//查找成功 { printf("該結(jié)點值存在!");flag=1; break; } //查找不成功,到下一層繼續(xù)查找 if(x<p->key) p=p->lchild;//查找左子樹 else p=p->rchild;//查找右子樹 } if(flag==0) { printf("找不到值為%d的結(jié)點!",x); p=NULL; } returnp; }p=p->lchild;p=p->lchild;(p->key==x)下一層? Y(p->key==x)下一層?p=p->rchild p=p->rchild找不到節(jié)點 Y N找不到節(jié)點查找成功 查找成功 二叉排序樹非遞歸查找算法流程圖4.3插入算法從根結(jié)點開始,根據(jù)比較規(guī)則,逐一與待插入結(jié)點的值比較,查找到插入結(jié)點在二叉排序樹中的未來位置,然后插入該結(jié)點。將一個關(guān)鍵字的值為x的結(jié)點s插入到二叉排序樹中,方法如下:(1)若二叉排序樹為空,則關(guān)鍵字值為x的結(jié)點s成為二叉排序樹的根。(2)若二叉排序樹非空,則將x與二叉排序樹的根進行比較,如果x的值等于根結(jié)點關(guān)鍵字的值,則停止插入;如果x的值小于根結(jié)點關(guān)鍵字的值,則將x插入左子樹;如果x的值大于根結(jié)點關(guān)鍵字的值,則將x插入右子樹。在左右子樹中插入方法與整個二叉排序樹相同。Bstnode*InsertBST(Bstnode*t,intx)//插入關(guān)鍵值為x的元素{ Bstnode*s,*p,*f;//*s為待插結(jié)點,*p為逐層查找結(jié)點,*f為待插結(jié)點的父結(jié)點 p=t; while(p!=NULL) { f=p;//查找過程中,f指向*p的父結(jié)點 if(x==p->key)//若二叉樹中已有關(guān)鍵值為x的元素,無需插入 returnt; if(x<p->key) { p=p->lchild; } else { p=p->rchild; } } s=(Bstnode*)malloc(sizeof(Bstnode)); s->key=x; s->lchild=NULL;s->rchild=NULL; if(t==NULL)//原樹為空,新結(jié)點作為二叉排序樹的根 returns; if(x<f->key) f->lchild=s;//新結(jié)點作為*f左孩子 else f->rchild=s;//新結(jié)點作為*f右孩子 returnt;}開始開始 輸入節(jié)點數(shù)n輸入節(jié)點數(shù)n調(diào)用插入函數(shù)調(diào)用插入函數(shù)結(jié)束結(jié)束插入算法流程圖4.4二叉排序樹的生成算法建立二叉排序樹,就是反復(fù)在二叉排序樹中插入新的結(jié)點。插入的原則是如果待插入結(jié)點的值小于根結(jié)點的值,則插入到左子樹中,否則插入到右子樹中。大致方法是:首先建一棵空二叉排序樹,然后逐個讀入元素,每讀入一個元素,就建一個新結(jié)點,并調(diào)用上述二叉排序樹的插入算法,將新結(jié)點插入到當前已生成的二叉排序樹中,最終生成一棵二叉排序樹。Bstnode*CreateBST(){ Bstnode*t; intkey; t=NULL;//設(shè)置二叉排序樹的初態(tài)為空 scanf("%d",&key); while(key!=endflag) { t=InsertBST(t,key); scanf("%d",&key); } returnt;}4.5中序遍歷算法voidInorder(Bstnode*t){ if(t!=NULL) { Inorder(t->lchild); Printf(“%4d\n”,t->key); Inorder(t->rchild); }}先遍歷左孩子,再遍歷父結(jié)點,最后遍歷右孩子。由于是對一個二叉排序樹進行中序遍歷,遍歷結(jié)果則是一個有序序列4.6刪除算法1.待刪除結(jié)點*p無左孩子,也無右孩子,則*p的父結(jié)點對應(yīng)的孩子指針置空;2.待刪除結(jié)點*p有左孩子,無右孩子,則*p的左孩子替代自己;3.待刪除結(jié)點*p無左孩子,有右孩子,則*p的右孩子替代自己;4.待刪除結(jié)點*p有左孩子,也有右孩子,本課程(數(shù)據(jù)結(jié)構(gòu)與算法)給出了兩種法:方法一:首先找到待刪結(jié)點*p的前驅(qū)結(jié)點*s,然后將*p的左子樹改為*p父結(jié)點的左子樹,而*p的右子樹改為*s的右子樹:f->lchild=p->lchild;s->rchild=p->rchild;free(p);方法二:首先找到待刪結(jié)點*p的前驅(qū)結(jié)點*s,然后用結(jié)點*s的值替代結(jié)點*p的值,再將結(jié)點*s刪除,結(jié)點*s的原左子樹改為*s的雙親結(jié)點*q的右子樹:p->data=s->data;q->rchild=s->lchild;free(s);我采用的是第二種算法。開始開始s-〉data〉T-〉datap=NULL Ns-〉data〉T-〉datap=NULL Yp=sp=ss=InserBST(T->)lchilds=InserBST(T->)lchilds=InserBST(T->)rchild結(jié)束結(jié)束刪除算法流程圖4.7主函數(shù)voidmain(){ inti,j,k; Bstnode*tree,*p;system("cls"); printf("★☆★☆★請先建立一棵二叉排序樹★☆★☆★\n\n"); printf("輸入其結(jié)點信息(輸入一組正整數(shù),當輸入0時結(jié)束):\n");tree=CreateBST();printf("中序遍歷的二叉排序樹:\n"); Inorder(tree);printf("二叉排序樹的根為:%d\n",tree->key);for(;;) switch(i=mainmenu()) { case0:exit(0); case1:switch(j=searchmenu()) { case1:search_Bitree(tree);break; case2:printf("\n請輸入要查找的結(jié)點的值:"); scanf("%d",&k);p=searchBST(tree,k); printf("\n"); break; //default:printf("輸入有誤!"); } break;case2:tree=insert_Bitree(tree);break; case3:tree=delete_Bitree(tree);break;case4:printf("\n"); printf("二叉排序樹的根為:%d\n",tree->key); printf("中序遍歷后的序列為:\n");print_Bitree(tree);printf("中序遍歷的二叉排序樹:\n"); Inorder(tree); printf("\n"); break;//default:printf("輸入有誤!"); }}4.8注意事項:其中,某些函數(shù)順序一定不能顛倒。例如建立二叉排序樹函數(shù)一定是在插入算法之后。編寫完基本操作算法后,為最后主函數(shù)的輸出模塊作準備,又分別寫了遞歸查找模塊、插入模塊、刪除模塊、顯示模塊。5.運行環(huán)境MicrosoftVisualC++6.0;MicrosoftWord20106.上機調(diào)試6.1語法錯誤及修改在編寫程序時,很容易出現(xiàn)分號漏寫和括號不匹配的現(xiàn)象,以及缺少返回值的問題。例如:在編寫非遞歸查找算法時:Bstnode*searchBST(Bstnode*t,intx){ Bstnode*p;intflag=0; p=t; while(p!=NULL) { if(p->key==x) { printf("找到了!");flag=1; returnp;break; } if(x<p->key) p=p->lchild; else p=p->rchild; } if(flag==0) { printf("找不到值為%d的結(jié)點",x); returnNULL; }}結(jié)果編譯時出現(xiàn)了警告warning:'searchBST':notallcontrolpathsreturnavalue然后我做了改動,改后程序如下:Bstnode*searchBST(Bstnode*t,intx){ Bstnode*p;intflag=0;p=t; while(p!=NULL) { if(p->key==x) { printf("該結(jié)點值存在!");flag=1; break; } if(x<p->key) p=p->lchild; else p=p->rchild; } if(flag==0) { printf("找不到值為%d的結(jié)點!",x); p=NULL; } returnp;}將NULL值賦給指針p,再在程序結(jié)尾返回p,此時,編譯結(jié)果就正確了!6.2程序輸出調(diào)整:在遞歸查找算法(Bsearch)中針對查找結(jié)果如何,沒有用明確的輸出函數(shù)表示出來。于是我添加了一個遞歸查找模塊如下:search_Bitree(Bstnode*t){ ints; Bstnode*p; printf("\n請輸入要查找的結(jié)點的值:"); scanf("%d",&s);if(s!=0) {p=Bsearch(t,s); if(p==NULL) printf("該結(jié)點值不存在!\n"); elseprintf("找不到值為%d的結(jié)點!\n",s); }}這樣主函數(shù)便可直接調(diào)用該函數(shù)來實現(xiàn)查找過程。6.3時間和空間性能分析:由于二叉排序樹的中序遍歷序列為一個遞增的有序序列,這樣可以將二叉排序樹看作是一個有序表。其查找過程:若查找成功,則是從根結(jié)點出發(fā)走了一條從根到某個結(jié)點的路徑;若查找不成功,則是從根結(jié)點出發(fā)走了一條從根到某個葉子結(jié)點的路徑。和關(guān)鍵字比較次數(shù)不超過二叉排序樹的深度。二叉排序樹的平均查找長度與其形態(tài)有關(guān)。最壞情況是具有n個結(jié)點的單支樹,其平均查找長度與順序查找相同,為(n+1)/2;即平均查找長度的數(shù)量級為O(n)。在最好情況下,二叉排序樹形態(tài)均勻,它的平均查找長度與二分查找相似,大約是log2n,其平均查找長度的數(shù)量級為O(log2n)。經(jīng)驗與體會:由于該設(shè)計問題是對數(shù)據(jù)結(jié)構(gòu)與算法課程中二叉樹章節(jié)的靈活應(yīng)用,所以課本給了我很大的幫助,結(jié)合所學知識以及對二叉排序樹的理解,來編寫該程序。7.測試結(jié)果及分析45244524531228904524452453122890圖(a)圖(b)圖(1)2、選擇方框中給定的項目(輸入0~4中任意數(shù))。若輸入錯誤會有提示,可以重新輸入。圖(2)輸入1,則出現(xiàn)查找菜單。選擇查找方法。圖(3)4、在查找菜單選1,則進行遞歸查找。圖(4)5、同理,若選擇2,則進行非遞歸查找。查找的值存在與否都會有顯示。圖(5)6、選2,則進行插入操作。插入關(guān)鍵值為13的結(jié)點后,顯示如圖(6),即插入13后的橫置的二叉排序樹(圖(c)——圖(d))。45452453122890134545245312289013圖(c)圖(d)圖(6)選3,進行刪除操作。刪除關(guān)鍵值為24的結(jié)點后,顯示如圖(7),即刪除24后的橫置的二叉排序樹(圖(e)——圖(f))、4545135312289045451353122890圖(e)圖(f)圖(7)選4則顯示詳細信息。如圖(8)所示,按中序遍歷(從小到大)依次輸出,并顯示每個結(jié)點的孩子情況,最后打印出橫置的二叉排序樹。圖(8)選0則退出程序。圖(9)8.用戶使用說明用戶可以根據(jù)本程序運行過程中出現(xiàn)的提示性語句來進行操作。要注意括號中的提示,若沒有按照提示輸入的話,程序可能將無法繼續(xù)進行下去。例如開始輸入數(shù)據(jù)時直到輸入0時才算結(jié)束輸入,從而進行下一步操作。在遇到選項時,選擇錯誤會給你重新選擇的機會。提示:進行一系列插入刪除等操作后,可以選擇顯示項來顯示最后的二叉排序樹狀態(tài)(二叉排序樹顯示的是中序遍歷后的序列)。9.參考文獻(1)王昆侖.李紅.數(shù)據(jù)結(jié)構(gòu)與算法.北京:中國鐵道出版社,2007.6(2)王昆侖.李紅.數(shù)據(jù)結(jié)構(gòu)與算法試驗指導(dǎo),2009(3)譚浩強.c程序設(shè)計.北京:清華大學出版社,2005.7(4)嚴蔚敏.數(shù)據(jù)結(jié)構(gòu):c語言版.北京:清華大學出版社,2002(5)耿國華.等.數(shù)據(jù)結(jié)構(gòu):用c語言描述.北京:高等教育出版社,2004設(shè)計過程中質(zhì)疑(或答辯)記載:二叉樹運行過程中用了什么排序?答:運用了中序遍歷排序。2.中序遍歷排序是怎樣的?答:先遍歷左孩子,再遍歷父結(jié)點,最后遍歷右孩子。3.在設(shè)計過程中遇到過那些困難?答:在編程序的過程的程序一直不能正確運行,最后發(fā)現(xiàn)函數(shù)的調(diào)用出現(xiàn)了問題。最后通過修改解決。指導(dǎo)教師評語:簽名:20**年7月5日附錄#include"stdio.h"#include"malloc.h"#include"stdlib.h"#defineendflag0//定義endflag為關(guān)鍵字輸入結(jié)束的標志//二叉排序樹的結(jié)點結(jié)構(gòu)typedefstructnode{ intkey;//關(guān)鍵字項 structnode*lchild,*rchild;//左右孩子指針}Bstnode;//二叉排序樹的查找算法之一(遞歸)Bstnode*Bsearch(Bstnode*t,intx){ if(t==NULL)//二叉排序樹為空,查找失敗 returnNULL; else{ if(t->key==x)//查找成功,返回當前結(jié)點 returnt; if(x<t->key) return(Bsearch(t->lchild,x));//進入左子樹遞歸查找 else return(Bsearch(t->rchild,x));//進入右子樹遞歸查找 }}//遞歸查找函數(shù)(顯示查找結(jié)果)voidsearch_Bitree(Bstnode*t){ ints;//定義待查結(jié)點的關(guān)鍵值 Bstnode*p;//定義待查的結(jié)點 printf("\n請輸入要查找的結(jié)點的值:"); scanf("%d",&s);if(s!=0) { p=Bsearch(t,s);//遞歸查找 if(p!=NULL) printf("該結(jié)點值存在!\n"); elseprintf("找不到值為%d的結(jié)點!\n",s);}}//二叉排序樹的查找算法之二(非遞歸)Bstnode*searchBST(Bstnode*t,intx){ Bstnode*p;intflag=0;p=t;//定義*p結(jié)點用于逐層查找,叢根結(jié)點開始查找 while(p!=NULL)//二叉排序樹不為空 { if(p->key==x)//查找成功 { printf("該結(jié)點值存在!");flag=1; break; } //查找不成功,到下一層繼續(xù)查找 if(x<p->key) p=p->lchild;//查找左子樹 else p=p->rchild;//查找右子樹 } if(flag==0) { printf("找不到值為%d的結(jié)點!",x); p=NULL; } returnp;}//二叉排序樹的結(jié)點插入算法Bstnode*InsertBST(Bstnode*t,intx)//插入關(guān)鍵值為x的元素{ Bstnode*s,*p,*f;//*s為待插結(jié)點,*p為逐層查找結(jié)點,*f為待插結(jié)點的父結(jié)點 p=t; while(p!=NULL) { f=p;//查找過程中,f指向*p的父結(jié)點 if(x==p->key)//若二叉樹中已有關(guān)鍵值為x的元素,無需插入 returnt; if(x<p->key) { p=p->lchild; } else { p=p->rchild; } } s=(Bstnode*)malloc(sizeof(Bstnode)); s->key=x; s->lchild=NULL;s->rchild=NULL; if(t==NULL)//原樹為空,新結(jié)點作為二叉排序樹的根 returns; if(x<f->key) f->lchild=s;//新結(jié)點作為*f左孩子 else f->rchild=s;//新結(jié)點作為*f右孩子 returnt; }//中序遍歷(遞歸法)voidInorder(Bstnode*t){ if(t!=NULL)//若二叉樹不空 { Inorder(t->lchild);//遍歷左孩子printf("%4d",t->key); Inorder(t->rchild);//遍歷右孩子 }}//二叉排序樹的結(jié)點刪除算法Bstnode*DeleteBST(Bstnode*t,intk)//刪除關(guān)鍵值為k的元素{ Bstnode*p,*f,*s,*q;//*p為待刪結(jié)點,*f為*p父結(jié)點,*s為*p的中序前驅(qū)結(jié)點,*q為*s的父結(jié)點 p=t;f=NULL;//從根結(jié)點開始查找,并將*f置空 //查找關(guān)鍵值為k的待刪結(jié)點*p while(p!=NULL) { if(p->key==k)break;//若找到,則退出循環(huán) f=p;//未找到時將*f替代*p,*p則下移進入左右子樹繼續(xù)查找 if(p->key>k) p=p->lchild; else p=p->rchild; } if(p==NULL)returnt;//若找不到,則返回原二叉排序樹的根指針 //查找成功后,對*p的刪除過程 if(p->lchild==NULL||p->rchild==NULL)//若*p無左子樹或無右子樹 { if(f==NULL)//若*p是原二叉排序樹的根 { if(p->lchild==NULL)t=p->rchild;//無左孩子,右孩子做根 elset=p->lchild; }//無右孩子,左孩子做根 elseif(p->lchild==NULL)//若*p無左子樹 { if(f->lchild==p)f->lchild=p->rchild;//p是*f的左孩子 elsef->rchild=p->lchild;//p是*f的右孩子 } else//若*p無右子樹 { if(f->lchild==p)f->lchild=p->lchild;//p是*f的左孩子 elsef->rchild=p->lchild;//p是*f的右孩子 } free(p); } else//若*p有左右子樹 { q=p;s=p->lchild; while(s->rchild)//在*p的左子樹中查找最右下結(jié)點(即其中序前驅(qū)結(jié)點) { q=s;s=s->rchild; } if(q==p)q->lchild=s->lchild; elseq->rchild=s->lchild; p->key=s->key;//將*s的值賦給*p free(s); } returnt;}//插入函數(shù)(顯示插入結(jié)果)Bstnode*insert_Bitree(Bstnode*t){ ints;//定義待插結(jié)點的關(guān)鍵值 Bstnode*p;//定義待插的結(jié)點printf("\n");printf("請輸入要插入的結(jié)點的值:");scanf("%d",&s);if(s!=0) { p=Bsearch(t,s);if(p==NULL) { t=InsertBST(t,s); printf("插入結(jié)點中序遍歷后的二叉排序樹:\n"); Inorder(t); printf("\n二叉排序樹的根為:%d\n",t->key); } elseprintf("該結(jié)點值存在,不插入!\n"); }returnt;}//刪除函數(shù)(顯示刪除結(jié)果)Bstnode*delete_Bitree(Bstnode*t){ ints;//定義待刪結(jié)點的關(guān)鍵值 Bstnode*p;//定義待刪的結(jié)點 printf("\n請輸入要刪除的結(jié)點的值:"); scanf("%d",&s); if(s!=0) { p=Bsearch(t,s); if(p==NULL) printf("找不到值為%d的結(jié)點!",s); else { t=DeleteBST(t,s); printf("刪除結(jié)點后中序遍歷的二叉排序樹:\n"); Inorder(t); printf("\n二叉排序樹的根為:%d\n",t->key); } } returnt;}//設(shè)置二叉排序樹的初值Bstnode*CreateBST(){ Bstnode*t; ints; t=NULL;//設(shè)置二叉排序樹的初態(tài)為空scanf("%d",&s);while(s!=endflag)//輸?shù)浇Y(jié)束符為止{ t=InsertBST(t,s);scanf("%d",&s); }returnt;}//顯示函數(shù)voidprint_Bitree(Bstnode*t){ if(t!=NULL)//中序遍歷二叉排序樹,并顯示遍歷結(jié)果 { print_Bitree(t->lchild);printf("遍歷結(jié)點%d",t->key);if(t->lchild!=NULL) printf("(該結(jié)點的左孩子為%d",t->lchild->key);elseprintf("(該結(jié)點的左孩子為空");if(t->rchild!=NULL)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論