IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 數據結構樹應用在哪兒比較多

數據結構樹應用在哪兒比較多 時間:2018-01-18      來源:未知

在數據結構中我們會學習到一種特殊的結構-----樹。老實說剛開始學這段時,感覺樹的邏輯太復雜,比之鏈表、隊列、棧都要復雜很多,但是慢慢接觸并且在自己敲過代碼之后,發現二叉樹其實邏輯和我們日常思維邏輯一樣簡單,它的存儲結構和雙向鏈表的存儲結構一樣。這是剛開始接觸樹的印象,本文屬于樹的升級版。

(1)AVL樹: 早的平衡二叉樹之一,是根據它的發明者G.M. Adelson-Velsky和E.M. Landis命名的。

它是先發明的自平衡二叉查找樹,也被稱為高度平衡樹。相比于"二叉查找樹",它的特點是:AVL樹中任何節點的兩個子樹的高度大差別為1。

數據結構樹

上面的兩張圖片,左邊的是AVL樹,它的任何節點的兩個子樹的高度差別都<=1;而右邊的不是AVL樹,因為7的兩顆子樹的高度相差為2(以2為根節點的樹的高度是3,而以8為根節點的樹的高度是1)。

AVL樹的查找、插入和刪除在平均和壞情況下都是O(logn)。

如果在AVL樹中插入或刪除節點后,使得高度之差大于1。此時,AVL樹的平衡狀態就被破壞,它就不再是一棵二叉樹;為了讓它重新維持在一個平衡狀態,就需要對其進行旋轉處理。

主要應用于windows對進程地址空間的管理。

AVL樹的節點結構是:

1. typedef struct _MMADDRESS_NODE {

2. ULONG_PTR StartingVpn; // 起始虛擬地址

3. ULONG_PTR EndingVpn; // 終止虛擬地址

4. struct _MMADDRESS_NODE *Parent;

5. struct _MMADDRESS_NODE *LeftChild;

6. struct _MMADDRESS_NODE *RightChild;

7.} MMADDRESS_NODE, *PMMADDRESS_NODE;

AVL樹的根節點保存在進程內核對象_EProcess中。_EProcess的結構沒有出現在文檔中,但是我們可以通過windbg獲取。在Windows 2003中,用windbg獲取如下輸出:

1. kd> dt _EProcess

2. nt!_EPROCESS

3. +0x000 Pcb : _KPROCESS

4. +0x078 ProcessLock : _EX_PUSH_LOCK

5. +0x080 CreateTime : _LARGE_INTEGER

6. +0x088 ExitTime : _LARGE_INTEGER

7. ……

8. +0x24c PriorityClass : UChar

9. +0x250 VadRoot : _MM_AVL_TABLE

10. +0x270 Cookie : Uint4B

上圖中偏移量為0x250處的VadRoot字段保存了AVL輸根節點所在的地址。因此,在驅動程序中,通過以下代碼可以獲取當前進程的AVL樹的根節點地址。

1. PMMADDRESS_NODE ZsaGetVmRoot(){

2. char * pEProcess = (char*)PsGetCurrentProcess();

3. char * avlRoot = pEProcess + 0x250;

4. char * p_MM_AVL_TABLE = avlRoot;

5. return (PMMADDRESS_NODE) p_MM_AVL_TABLE;

6. }

既然獲得了根地址,則可以對二叉樹進行遍歷,打印出整個數據結構。以下是某個測試進程在進行了1024*1024次new分配后,AVL樹的內容。可以看到,樹基本是平衡的。

0,0
├─────N
└─────280,2b3
            ├─────150,24f
            │          ├─────130,134
            │          │          ├─────20,20
            │          │          │          ├─────10,10
            │          │          │          └─────30,12f
            │          │          └─────140,140
            │          └─────260,275
            │                      ├─────250,25f
            │                      └─────N
            └─────10200,10372
                        ├─────400,502
                        │          ├─────310,315
                        │          │          ├─────2c0,300
                        │          │          └─────370,37f
                        │          │                      ├─────320,360
                        │          │                      └─────380,382
                        │          └─────c10,140f
                        │                      ├─────610,80f
                        │                      │          ├─────510,60f
                        │                      │          └─────810,c0f
                        │                      └─────2410,440f
                        │                                  ├─────1410,240f
                        │                                  └─────4410,840f
                        └─────7c930,7c9ff
                                   ├─────10540,1853f
                                   │          ├─────10480,10536
                                   │          └─────7c800,7c92a
                                   │                      ├─────18540,2853f
                                   │                      └─────N
                                   └─────7ffdd,7ffdd
                                               ├─────7ffa0,7ffd2
                                               │          ├─────7f6f0,7f7ef
                                               │          └─────N
                                                └─────7ffde,7ffde

(2)字典樹,又稱為單詞查找樹,Tire數,是一種樹形結構,它是一種哈希樹的變種。

數據結構樹

它是不同字符串的相同前綴只保存一份。

相對直接保存字符串肯定是節省空間的,但是它保存大量字符串時會很耗費內存(是內存)。

類似的有:前綴樹(prefix tree),后綴樹(suffix tree),radix tree(patricia tree, compactprefix tree),crit-bit tree(解決耗費內存問題),以及前面說的double array trie。

前綴樹:字符串快速檢索,字符串排序,長公共前綴,自動匹配前綴顯示后綴。

后綴樹:查找字符串s1在s2中,字符串s1在s2中出現的次數,字符串s1,s2長公共部分,長回文串。

trie 樹的一個典型應用是前綴匹配,比如下面這個很常見的場景,在我們輸入時,搜索引擎會給予提示。

數據結構樹

上一篇:嵌入式編程規范及注意事項

下一篇:嵌入式linux tcpip協議棧概述

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 无锡鑫润杰金属科技有限公司| 守护者官网-儿童安全卫士 | 健身器材_健身器材厂_健身器材厂家-徐州兰士健身器材有限公司 | 南昌运通工程机械租赁有限公司| 珀金斯动力设备扬州有限公司 | 深圳人才网_深圳招聘网_【官方网站】 | 压缩强度测定仪-纸管平压强度测定仪-电脑拉力仪-杭州纸邦自动化技术有限公司 | 合金锤头_破碎机锤头_耐磨锤头_巩义市东辰铸造 高耐磨合金锤头厂家 | 铁三角话筒-思美音频处理器-艾伦赫赛数字调音台-北京盛世音盟电子科技有限公司 | 造雪机|人工造雪机|造雪机价格|造雪机厂家-河南晋安机械科技有限公司 | 冷却塔厂家_冷却塔降噪维修_闭式冷却塔维修改造厂家-广东特菱空调 | 万博瑞升(天津)科技有限公司-管道应力|管道振动|脉动|CAE,CFD 弯箍机_钢筋弯箍机_全自动钢筋弯箍机_数控弯箍机-建科智能装备制造(天津)股份有限公司 | 潍坊志扬机械有限公司_扫地机-抓蔗机-履带运输机-自上料搅拌车 | 山东货架厂家,重型货架,阁楼货架,钢平台,板材货架-山东智造仓储设备有限公司 | 丝杆升降机-蜗轮-滚珠-螺旋-swl丝杠升降机-德州润驰减速机有限公司 | 小程序开发,网站建设,APP开发,商城系统开发,社区团购系统开发,区块链溯源,互联网资质办理-软多信息技术有限公司_河南软多信息技术有限公司 | 收银系统_收银机_pos收款机_门店管理系统-客如云 | 铸铁型材_灰铁棒_球铁棒_圆铁棒生产厂家★河北起昌精密装备制造有限公司 | 宁波搬家_宁波搬家公司_宁波搬厂_专业搬家搬厂-「宁波喜洋洋搬家公司」 | 郑州四棉纺织有限公司-现代化纺织企业 | 混凝土布料机,隧道布料机,衬砌台车布料装置 - 河北聚力智能装备有限公司 | 山东汇河环保科技集团有限公司,水囊水袋,水罐,油囊,预压水袋,吊重水袋_山东汇河环保科技集团有限公司,水囊水袋,水罐,油囊,预压水袋,吊重水袋 | 制砂机-合金-耐磨锤头-耐磨衬板-铸造件厂家-巩义市豫园宏宇铸造有限公司 | 呕吐毒素快速检测仪-黄曲霉毒素测定仪-玉米赤霉烯酮快速检测卡-南京微测生物科技有限公司 | 温湿度变送器_pm2.5传感器_湿敏电阻_二氧化碳传感器_甲醛传感器-美特瑞科技 | 油气润滑_稀油润滑_干油润滑-启东中德润滑设备有限公司 | 上海搬运公司_上海工厂设备搬迁_大型设备吊装搬运_设备安装公司-桂星装卸搬运 | 化妆粉扑厂家【秀兰】一线品牌资格供应商_海绵粉扑批发_气垫粉扑价格_广州秀兰生物科技有限公司 化工招聘网 化工人才网|化工英才网-化工企业招聘首选网站 | 树脂井盖,复合井盖,井盖厂家-山东宝盖新材料 | 移动破碎站-洗沙机-球磨制砂机-污泥处理-青州冠诚重工机械有限公司 | 瑞凯科技,吉林省瑞凯科技,吉林省瑞凯科技股份有限公司 | 无锡防火门|无锡放火卷帘门|无锡市防火卷帘门厂有限公司 | 上海外资代理记账|上海软银财务咨询有限公司 | 全屋定制超市_全屋定制加盟_星空梵高全屋定制招商 | 乌鲁木齐万疆通管道设备有限公司 销售热线;13565955557-新疆 乌鲁木齐 万疆通 管道设备 波纹补偿器 膨胀节 金属软管 伸缩器 管件 阀门 维修 | 陶瓷纤维模块|陶瓷纤维毯|陶瓷纤维纸|高温隔热材料|陶瓷纤维厂家-济南火龙热陶瓷有限责任公司 | 制砂机_选矿设备_耐磨件-郑州富嵩机械设备有限公司 | 面馆加盟_重庆小面加盟_特色面馆加盟首选老城街 | 邮政纸箱_淘宝纸箱_抗压纸箱,盐城纸箱,盐城纸箱厂家,盐城承重纸箱-盐城君雅纸箱 | 胶球清洗-射水抽气器-磷酸盐加药装置-连云港振辉机械设备有限公司 | 太阳能路灯生产厂家-郑州太阳能高杆灯价格-道路照明智能路灯-河南坤德照明 |