數據結構與算法複習

二叉樹

 

    A

   / /

  B  C

 /   / /

D  E  F

 

先序遍歷(前序遍歷,先根便利)

如果非空,先訪問根節點,再先序遍歷左子樹,最後先序遍歷右子樹,即NLR。

A->B->D->C->E->F

 

中序遍歷(中根便利)

如果非空,先中序遍歷左子樹,再訪問根節點,最後中序遍歷右子樹,即LNR。

D->B->A->E->C->F

 

後序遍歷(後根便利)

如果非空,先後序遍歷左子樹,再後序遍歷右子樹,最後訪問根節點,即LRN。

D->B->E->F->C->A

 

 

C代碼:

 

 

哈希表

 

 

一點思考:

哈希表、樹、鏈表存儲都有兩種方式:局部變量和申請內存。前者適合比較小數據的存儲,優點是不用維護內存,後者是和大容量存儲,但要記得free。

有兩個問題需要注意:

 

一、我們操作的時候,經常聲明個局部變量,然後把它掛到表上去,類似pstNode->pstNext = &XXX,但是有沒有想過當這個人函數彈出了,局部變量也就銷毀了,如果表沒了,也就罷了,如果表還在,會有什麼後果?——很嚴重,你掛在表上的數據已經不是那個變量了!

解決辦法:

1、不要掛局部變量,malloc一塊內存,掛上去;

2、掛全局變量;

3、如果非要掛局部變量,保證其生命週期與表相同,或者比表還長。

一般使用第一種方法,全局變量謹慎使用,佔內存。

 

二、掛了個局部變量到表上去,銷毀表的時候(不管局部變量生命週期是否結束)free這些節點。

問題又來了,掛上去的局部變量又不是malloc的,怎麼能free呢?malloc和free一定是成對使用的。

解決辦法:

1、全部使用malloc,不掛什麼變量,不管是局部的還是全局的;

2、全部掛局部變量,不釋放,等函數結束後自動銷毀。

一般都使用第一種方法。如果執意要混合使用,就等著出問題吧。。。

 

冒泡排序:

 

 

 

快速排序:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值