无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

首頁(yè) 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
中華工控網(wǎng)首頁(yè)
  P L C | 變頻器與傳動(dòng) | 傳感器 | 現(xiàn)場(chǎng)檢測(cè)儀表 | 工控軟件 | 人機(jī)界面 | 運(yùn)動(dòng)控制
  D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場(chǎng)總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測(cè)控 | 工業(yè)安全
  電 源 | 嵌入式系統(tǒng) | PC based | 機(jī)柜箱體殼體 | 低壓電器 | 機(jī)器視覺(jué)
函數(shù)遞歸在樹形結(jié)構(gòu)數(shù)據(jù)遍歷中的應(yīng)用
紫金橋軟件技術(shù)有限公司
收藏本文     查看收藏
 

       我們?cè)谑褂脴湫谓Y(jié)構(gòu)數(shù)據(jù)時(shí),常常需要遍歷整棵樹或某一支下的所有結(jié)點(diǎn),用于查找、打印等功能。因?yàn)闃湫谓Y(jié)構(gòu)不同于數(shù)組、鏈表等簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu),它像樹枝一樣每個(gè)根結(jié)點(diǎn)可以具有多個(gè)子結(jié)點(diǎn),無(wú)限延展,因此需要專門的算法去遍歷。樹形結(jié)構(gòu)的遍歷有很多種方法,下面我們以紫金橋監(jiān)控組態(tài)軟件(以下簡(jiǎn)稱為“RealInfo)為例,簡(jiǎn)單講解函數(shù)遞歸在這種遍歷方法中的應(yīng)用。

       RealInfo中,“樹形控件”是表示樹狀結(jié)構(gòu)數(shù)據(jù)的組件,“自由報(bào)表”是表示表格數(shù)據(jù)的組件,這兩種組件自身都提供了一些常用方法。我們現(xiàn)在實(shí)現(xiàn)這樣的功能:將樹形控件中的指定分支數(shù)據(jù)打印在自由報(bào)表中。可以利用窗口自定義函數(shù)的遞歸功能。

       樹形控件中的數(shù)據(jù)顯示方式如下圖所示:

       每個(gè)結(jié)點(diǎn)以結(jié)點(diǎn)編碼為唯一標(biāo)識(shí),每個(gè)結(jié)點(diǎn)可以顯示一個(gè)字符串作為結(jié)點(diǎn)文本(詳見RealInfo聯(lián)機(jī)幫助)。

       本例中,我們將樹形結(jié)構(gòu)數(shù)據(jù)打印在自由報(bào)表上,其效果如下圖所示:

       每個(gè)根結(jié)點(diǎn)打印完成后,遇到子結(jié)點(diǎn)時(shí)打印位置自動(dòng)向右、向下移動(dòng)一個(gè)單元格;遇到兄弟結(jié)點(diǎn)時(shí)打印位置向下移動(dòng)一個(gè)單元格。

       現(xiàn)在我們開始分析算法。我們知道,樹的遍歷是指沿著某條搜索路線,依次對(duì)樹中每個(gè)結(jié)點(diǎn)均做一次且僅做一次訪問(wèn)。這樣,我們把遍歷過(guò)程想象成為一次單程旅行,出發(fā)點(diǎn)是樹的根結(jié)點(diǎn),然后按先自左向右、然后自上而下的順序,先后經(jīng)過(guò)每個(gè)結(jié)點(diǎn),最后走到最下方的葉子結(jié)點(diǎn)處。

我們可以采用這樣的遍歷方式:

1)        當(dāng)所在結(jié)點(diǎn)具有子結(jié)點(diǎn)時(shí),那么按自左向右原則,接著訪問(wèn)它的第一個(gè)子結(jié)點(diǎn),直到所在結(jié)點(diǎn)沒(méi)有子結(jié)點(diǎn)為止。

2)        當(dāng)所在結(jié)點(diǎn)沒(méi)有子結(jié)點(diǎn),但具有兄弟結(jié)點(diǎn)時(shí),那么按自上向下原則依次訪問(wèn)它的兄弟結(jié)點(diǎn)。

3)        當(dāng)所在結(jié)點(diǎn)沒(méi)有子結(jié)點(diǎn),而且沒(méi)有兄弟結(jié)點(diǎn)時(shí),那么按自上向下原則訪問(wèn)它父結(jié)點(diǎn)的兄弟結(jié)點(diǎn)。

分析這個(gè)過(guò)程并觀察樹形結(jié)構(gòu),我們會(huì)發(fā)現(xiàn),每個(gè)父結(jié)點(diǎn)可以擁有n(n>=0)個(gè)子結(jié)點(diǎn),若將這n個(gè)子結(jié)點(diǎn)看作父結(jié)點(diǎn),則每個(gè)父結(jié)點(diǎn)仍然具有n個(gè)子結(jié)點(diǎn)。由此看來(lái),每一支數(shù)據(jù)乃至整棵樹都可以看作是有限個(gè)父-子結(jié)構(gòu)的組合。在樹的遍歷過(guò)程中,總是不斷的重復(fù)“父→子”這一訪問(wèn)方式,因此我們可以提取這一方式形成一個(gè)函數(shù),并利用函數(shù)遞歸來(lái)完成整個(gè)遍歷。

這個(gè)函數(shù)用于根據(jù)輸入的父結(jié)點(diǎn)編碼和起始打印位置將其所有子結(jié)點(diǎn)打印出來(lái)。算法如下:

       函數(shù)首先判斷輸入結(jié)點(diǎn)是否具有子結(jié)點(diǎn),如果沒(méi)有則返回,如果有則取得子結(jié)點(diǎn)列表,然后循環(huán)打印每個(gè)子結(jié)點(diǎn)并遞歸調(diào)用自身函數(shù)打印其子結(jié)點(diǎn),當(dāng)一個(gè)結(jié)點(diǎn)a的子結(jié)點(diǎn)打印完畢并返回后按相同規(guī)則依次打印的a結(jié)點(diǎn)的兄弟結(jié)點(diǎn),直到所有兄弟結(jié)點(diǎn)打印完畢為止。

       工程制作過(guò)程如下:

1)        新建窗口,創(chuàng)建樹形控件,起名為“tree”;創(chuàng)建自由報(bào)表起名為“report”;創(chuàng)建一個(gè)按鈕。

2)        創(chuàng)建窗口函數(shù)(用于得到指定結(jié)點(diǎn)的子結(jié)點(diǎn)編碼數(shù)組):

func_GetAllChildNodeKey(Tree& treeObj, String& strFatherNodeKey, String Array& strArrChildNodeKeys) As Int

代碼如下:

int nChildNodeCount = 0;

string strNodeKeyTemp = "";

int i = 0;

strArrChildNodeKeys.Clear();

nChildNodeCount = #treeObj.GetNodeCount(strFatherNodeKey);

for i=0 to nChildNodeCount

       if strFatherNodeKey=="" then

              strNodeKeyTemp = IntToStr(i,10);

       else

              strNodeKeyTemp = strFatherNodeKey + "." + IntToStr(i,10);

       endif

       strArrChildNodeKeys.Add(strNodeKeyTemp);

next

return nChildNodeCount;

3)        創(chuàng)建窗口函數(shù)(用于遞歸打印指定結(jié)點(diǎn)的子結(jié)點(diǎn),不打印自身結(jié)點(diǎn))

func_PrintToReport(String strFatherNodeKey, Int nCol, Int nRow, Int& nRowOffSet) As Int

代碼如下:

string strArrChildNodeKeys[];

string strNodeText = "";

int nCount = 0;

int i = 0;

func_GetAllChildNodeKey(#tree,strFatherNodeKey,strArrChildNodeKeys);

nCount = strArrChildNodeKeys.GetCount();

if nCount>0 then

       if #report.ColCount()<nCol then

              #report.AddCol(1);

       endif

       for i=0 to nCount

              if #report.RowCount()<nRow+nRowOffset then

                     #report.AddRow(1);

              endif

             

              strNodeText = #tree.GetNodeTxt(strArrChildNodeKeys[i]);       //打印本結(jié)點(diǎn)

              #report.SetTxt(nCol,nRow+nRowOffset,strNodeText);

              nRowOffset = nRowOffset + 1;

              nRowOffset = func_PrintToReport(strArrChildNodeKeys[i]

,nCol+1,nRow,nRowOffset); //遞歸

       next

endif

return nRowOffset;

4)        創(chuàng)建窗口函數(shù)(用于打印初始結(jié)點(diǎn)自身,并啟動(dòng)遞歸函數(shù)):func_Print()

代碼如下

int nRowOffSet = 0;

#report.DelTailCol(#report.ColCount());

#report.DelTailRow(#report.RowCount());

#report.AddCol(1);

#report.AddRow(1);

#report.SetTxt(1,1,#tree.GetNodeTxt(#tree.GetCurSelNodeKey()));

func_PrintToReport(#tree.GetCurSelNodeKey(),2,2,nRowOffSet);

5)        在按鈕中鼠標(biāo)點(diǎn)擊動(dòng)作中輸入:func_Print();

6)        運(yùn)行并查看效果。運(yùn)行時(shí),不選擇樹結(jié)點(diǎn),點(diǎn)擊按鈕后報(bào)表中打印出整棵樹,因?yàn)楦Y(jié)點(diǎn)文本為空,所以報(bào)表第一列為空。選中任意一個(gè)樹結(jié)點(diǎn)后,報(bào)表中打印出本分支所有結(jié)點(diǎn),包含本結(jié)點(diǎn)。

效果圖如下:

       本文以RealInfo為例,講述了一種通過(guò)函數(shù)遞歸調(diào)用來(lái)實(shí)現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)遍歷的方法,其中遞歸函數(shù)體實(shí)現(xiàn)了打印指定結(jié)點(diǎn)的子結(jié)點(diǎn)功能。本方法適用于少量樹形結(jié)構(gòu)數(shù)據(jù)的遍歷,當(dāng)數(shù)據(jù)量過(guò)大時(shí)需要作進(jìn)一步優(yōu)化。


 

狀 態(tài): 離線

公司簡(jiǎn)介
產(chǎn)品目錄

公司名稱: 紫金橋軟件技術(shù)有限公司
聯(lián) 系 人: 李磊
電  話: 0459-8151391-808
傳  真: 0459-8151391-804
地  址: 大慶市高新區(qū)服務(wù)外包產(chǎn)業(yè)園C-1座817室
郵  編: 163316
主  頁(yè):
 
該廠商相關(guān)技術(shù)文摘:
跨平臺(tái)實(shí)時(shí)數(shù)據(jù)庫(kù)變量引用導(dǎo)航功能介紹
跨平臺(tái)實(shí)時(shí)數(shù)據(jù)庫(kù) 如何利用MODBUS仿真軟件測(cè)試MODBUS驅(qū)動(dòng)
紫金橋跨平臺(tái)實(shí)時(shí)數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)多屏顯示
紫金橋跨平臺(tái)軟實(shí)時(shí)數(shù)據(jù)庫(kù)Web服務(wù)器和數(shù)據(jù)服務(wù)器分離訪問(wèn)的配置
紫金橋跨平臺(tái)軟件遠(yuǎn)程采集RealInfo6.5
使用虛擬機(jī)做的工程實(shí)現(xiàn)跨網(wǎng)Web訪問(wèn)
紫金橋軟件Microsoft Office Access 2003的ODBC數(shù)據(jù)源配置
紫金橋軟件閘門整體自動(dòng)化監(jiān)控系統(tǒng)
通過(guò)紫金橋軟件來(lái)提高畫面組態(tài)速度
組態(tài)軟件在配套設(shè)備中的應(yīng)用
紫金橋的關(guān)系庫(kù)同步工具簡(jiǎn)介
紫金橋組態(tài)軟件與歐姆龍PLC以太網(wǎng)通信(FINS命令)——CPU型號(hào)-CJ2M-CPU33
更多文摘...
立即發(fā)送詢問(wèn)信息在線聯(lián)系該技術(shù)文摘廠商:
用戶名: 密碼: 免費(fèi)注冊(cè)為中華工控網(wǎng)會(huì)員
請(qǐng)留下您的有效聯(lián)系方式,以方便我們及時(shí)與您聯(lián)絡(luò)

關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報(bào)
工控網(wǎng)客服熱線:0755-86369299
版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved

无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
欧美精选视频一区二区| 视频一区二区不卡| 日韩欧美国产精品综合嫩v| 久久亚洲在线| 日韩中文字幕高清在线观看| 国产欧美另类| 亚洲日本免费电影| 午夜日韩影院| 日韩精品一区第一页| 婷婷六月综合| 久久激情一区| 国产在线不卡| 亚洲免费观看| 欧美日韩免费观看一区=区三区| 久久视频一区| 国产伦精品一区二区三区在线播放| 国产伦乱精品| 欧美aa国产视频| 婷婷综合电影| 午夜一级在线看亚洲| 成人免费网站www网站高清| 综合日韩av| 日本亚洲三级在线| 亚洲三级av| 在线免费观看亚洲| 免费成人av在线播放| 99成人在线| 国产日产高清欧美一区二区三区 | 欧美日一区二区在线观看| 一区二区91| 国产精品专区免费| 欧美99久久| 精品福利久久久| 丝袜a∨在线一区二区三区不卡| 国产亚洲欧美日韩精品一区二区三区 | 亚洲九九精品| 日韩伦理一区| 欧美日韩18| 免费在线观看一区二区三区| 欧美在线看片| 亚洲一区免费| 美女一区网站| 国产精品色在线网站| 久久福利精品| 五月婷婷六月综合| 日韩三区免费| 久久精品高清| 日本欧美国产| 97在线精品| 午夜在线一区| 不卡在线一区| 激情综合网址| 亚洲精品中文字幕乱码| 宅男噜噜噜66国产日韩在线观看| 久久人人精品| 亚洲资源av| 日韩福利视频一区| 日韩精品电影一区亚洲| 亚洲人www| 日本综合精品一区| 国产三级精品三级在线观看国产| 亚洲免费影院| 日本不卡视频在线| 国产96在线亚洲| 成人一区而且| 日韩一级不卡| 国产精品115| 欧美91精品| 999国产精品视频| 一区免费视频| 欧美国产日韩电影| zzzwww在线看片免费| 欧美精品一二| 天堂av一区| 婷婷成人在线| 欧美三级第一页| 久久精品国产99国产| 婷婷六月综合| 国产超碰精品| 天堂成人国产精品一区 | 国产一区成人| 亚洲国产欧美日本视频| 日韩专区一卡二卡| 久久青青视频| 国产精品一线| 日本综合视频| 亚洲欧美网站在线观看| 国产精品88久久久久久| 亚洲一区二区三区高清| 国产精品亚洲综合在线观看| 成人在线视频区| 日韩精品视频在线看| 亚洲一区二区三区高清不卡| 欧美午夜精彩| 亚洲精品97| 欧美福利专区| 国产精品久久久久久久久妇女| 亚洲精品大全| 快she精品国产999| 久久亚洲不卡| 日韩综合一区二区| 国产九九精品| 国产一区二区三区免费在线| 成人一区而且| 国产一区观看| 丝袜亚洲精品中文字幕一区| 不卡中文字幕| 亚洲欧美日本视频在线观看| 日韩精品一二三四| 精品视频网站| 亚洲一区欧美激情| 国产欧美一区二区三区精品观看| 免费在线日韩av| 亚洲高清久久| 国产精品www.| 久久国产中文字幕| 国产精品视频一区二区三区综合| 亚洲深夜视频| 清纯唯美亚洲综合一区| 日韩电影免费在线观看| 视频一区二区三区入口| 国产精品久久久久久久久久久久久久久| 国产日本精品| 五月综合激情| 视频福利一区| 精品亚洲免a| 国产精品日本一区二区三区在线| 久久久水蜜桃av免费网站| 国产日韩免费| 日韩不卡一区二区| 性色av一区二区怡红| 日韩欧美一区二区三区在线观看 | 亚洲精品中文字幕乱码| 日韩在线二区| 激情91久久| 日韩精品久久理论片| 亚洲欧洲日韩精品在线| 亚欧洲精品视频在线观看| 激情欧美国产欧美| 午夜一级在线看亚洲| 人人草在线视频| 国产精品黄色| 欧美亚洲免费| 国产日韩在线观看视频| 欧美一级一区| 麻豆久久久久久| 99视频精品全部免费在线视频| 麻豆视频久久| 国产一卡不卡| 久久伊人国产| 精品欧美日韩精品| 成人在线黄色| 欧美精品一二| 亚洲精品一二| 日韩av在线播放中文字幕| 日韩高清一区在线| 91综合视频| 日韩视频二区| 欧美国产日本| 亚洲第一区色| 99精品99| 亚洲理论在线| www在线观看黄色| 国产亚洲毛片| 国产精品日本一区二区不卡视频| 国产一区二区亚洲| 最新日韩av| 超碰在线99| 日韩高清在线不卡| 欧美福利专区| 精品视频99| 日韩av中文字幕一区二区三区| 国产成人久久| 国产福利一区二区三区在线播放| 99久久视频| 久久精品99国产国产精| 亚洲激情国产| 日韩一区欧美| 精品国产18久久久久久二百| 欧美午夜不卡影院在线观看完整版免费| 国产视频一区三区| 国产日产高清欧美一区二区三区| 免费精品国产的网站免费观看| 一区二区国产在线观看| 欧美三级精品| 精精国产xxxx视频在线野外| 欧美永久精品| 国产午夜久久av| 日韩不卡一区二区| 国产欧美三级| 国产精品红桃| 捆绑调教美女网站视频一区| 国产欧美亚洲一区| 国产精品福利在线观看播放| 日韩午夜视频在线| 人人爱人人干婷婷丁香亚洲| 欧美中文字幕一区二区| 免费久久99精品国产| 综合欧美亚洲| zzzwww在线看片免费|