數據結構與算法 問題集

 #返回上一級
html

@Author: 張海拔算法

@Update: 2014-6-1數組

@Link: http://www.cnblogs.com/zhanghaiba/p/3513330.html數據結構

 

【基礎數據結構】函數

◇◇線型結構學習

◇◇◇◇線性表之靜態表(基於數組和靜態分配空間)優化

◇◇◇◇◇◇◇◇靜態表之整型數組的插入、刪除、查找 link(public)編碼

◇◇◇◇◇◇◇◇有序數組的合併 link(public)spa

◇◇◇◇◇◇◇◇用數組模擬約瑟夫問題 link(public)設計

◇◇◇◇◇◇◇◇怎樣實現大整數的乘法?(指定規模)

◇◇◇◇◇◇◇◇怎樣實現動態數組?(任意規模)

◇◇◇◇◇◇◇◇二維數組的轉置

◇◇◇◇◇◇◇◇靜態表之字符數組(字符串)的字符統計

◇◇◇◇◇◇◇◇字符串反轉、旋轉

◇◇◇◇◇◇◇◇字符串匹配問題與KMP算法

◇◇◇◇◇◇◇◇怎樣實現一個strstr()?

◇◇◇◇線性表之動態表(基於指針和動態分配空間)

◇◇◇◇◇◇◇◇單鏈表的建立、插入、刪除、查找 link(public)

◇◇◇◇◇◇◇◇怎樣就地反轉單鏈表? link(public)

◇◇◇◇◇◇◇◇有序單鏈表的合併 link(public)

◇◇◇◇◇◇◇◇怎樣判斷單鏈表是否存在環路?

◇◇◇◇◇◇◇◇怎樣肯定鏈表中倒數第k個節點?

◇◇◇◇◇◇◇◇怎樣高效地解決約瑟夫問題?

◇◇◇◇◇◇◇◇雙鏈表

◇◇◇◇◇◇◇◇僞鏈表

◇◇◇◇◇◇◇◇#數組和鏈表我的總結 link(private)

◇◇◇◇棧

◇◇◇◇◇◇◇◇棧的數組實現和括號匹配的檢查 link(public)

◇◇◇◇◇◇◇◇棧的鏈表實現

◇◇◇◇◇◇◇◇怎麼實現Linux下的逆波蘭計算器dc? link(public)

◇◇◇◇隊列

◇◇◇◇◇◇◇◇怎樣用兩個棧模擬一個隊列?

◇◇◇◇◇◇◇◇怎樣實現實現優先隊列?

◇◇樹型結構

◇◇◇◇二叉樹

◇◇◇◇◇◇◇◇二叉樹的幾種建立方法 link(public)

◇◇◇◇◇◇◇◇由遍歷序列建立二叉樹 link(public)

◇◇◇◇◇◇◇◇二叉樹四種遍歷方法

◇◇◇◇◇◇◇◇二叉樹前序中序和後序遍歷的非遞歸實現

◇◇◇◇◇◇◇◇怎樣優化二叉樹的遍歷?

◇◇◇◇◇◇◇◇怎樣求二叉樹的高度和寬度(非遞歸)?

◇◇◇◇◇◇◇◇怎樣求二叉樹節點間最遠距離(二叉樹「直徑」)?

◇◇◇◇◇◇◇◇怎樣求二叉樹指點倆節點的最近公共祖先?

◇◇◇◇◇◇◇◇二叉樹的旋轉操做和平衡判斷 link(public)

◇◇◇◇◇◇◇◇怎樣輸出二叉樹的全部路徑(按字典序)? link(public)

◇◇◇◇◇◇◇◇二叉樹全部路徑問題的應用(如最大權值路徑、權值爲K的路徑)?

◇◇◇◇哈夫曼樹(最優二叉樹)

◇◇◇◇◇◇◇◇哈夫曼樹的建立

◇◇◇◇◇◇◇◇哈夫曼樹的編碼與解碼

◇◇◇◇◇◇◇◇怎樣製做一個文本文件壓縮軟件?

◇◇圖型結構

◇◇◇◇鄰接矩陣

◇◇◇◇鄰接表 link(public)

◇◇◇◇◇◇◇◇鄰接表和鄰接矩陣的相互轉換 link(public)

◇◇集合結構(主要用於動態操做)

◇◇◇◇堆

◇◇◇◇二叉排序樹(二叉搜索樹、二叉查找樹)

◇◇◇◇◇◇◇◇二叉排序樹刪除、搜索、插入的遞歸實現 link(public)

◇◇◇◇◇◇◇◇二叉排序樹刪除、搜索、插入的迭代實現 link(public)

◇◇◇◇◇◇◇◇怎樣把二叉排序樹轉換爲有序雙鏈表

◇◇◇◇◇◇◇◇排序二叉樹中求最近公共祖先

◇◇◇◇平衡二叉樹之AVL

◇◇◇◇◇◇◇◇AVL的遞歸實現

◇◇◇◇◇◇◇◇AVL的迭代實現

◇◇◇◇哈希表(散列表)

 

【高級數據結構】(實用)

◇◇◇◇並查集

◇◇◇◇線段樹

◇◇◇◇Tire樹(字典樹)

◇◇◇◇Tire圖和AC自動機

◇◇◇◇B樹

◇◇◇◇平衡二叉樹之紅黑樹 

 

【經典算法】

◇◇查找算法(靜態)

◇◇◇◇直接查找

◇◇◇◇◇◇◇◇直接查找的優化實現

◇◇◇◇二分查找(有序靜態表)

◇◇◇◇◇◇◇◇如何實現sqrt()?

◇◇◇◇◇◇◇◇怎樣快速求冪?

◇◇排序算法(內部排序)

◇◇◇◇基本排序方法:冒泡排序、簡單選擇排序、直接插入排序 link(public)

◇◇◇◇快速排序 link(public)

◇◇◇◇◇◇◇◇怎樣快速求數組中第k大的數?

◇◇◇◇堆排序 link(public)

◇◇◇◇◇◇◇◇怎樣找出前k大的k個數(Top k 集合問題)?

◇◇◇◇希爾排序 link(public) 

◇◇◇◇歸併排序 link(public) 

◇◇◇◇◇◇◇◇怎樣求出逆序對數(Inverse Number)? link(public)

◇◇◇◇◇◇◇◇怎樣提高大整數乘法的效率?

◇◇◇◇基數排序 

◇◇◇◇鏈表的排序

◇◇◇◇◇◇◇◇怎樣實現鏈表的歸併排序 link(public)

◇◇◇◇線性時間排序

◇◇◇◇◇◇◇◇位圖數據結構及其排序 link(public)

◇◇◇◇排序的實際使用  

◇◇圖算法 

◇◇◇◇DFS和BFS link(public)

◇◇◇◇單源最短路(Dijkstra算法) link(public)

◇◇◇◇拓撲排序 link(public) 

◇◇◇◇最小生成樹 

◇◇搜索算法

◇◇◇◇狀態搜索

◇◇◇◇◇◇◇◇倒水問題

◇◇◇◇◇◇◇◇八數碼問題

◇◇◇◇剪枝優化

◇◇◇◇回溯法

◇◇◇◇◇◇◇◇怎樣輸出可重集的全排列 link(public)

◇◇◇◇◇◇◇◇例題: 排列搜索 link(public)

◇◇◇◇◇◇◇◇八皇后問題

◇◇◇◇動態規劃

◇◇◇◇◇◇◇◇最大連續和問題

◇◇◇◇◇◇◇◇最長公共子序列

◇◇◇◇◇◇◇◇DAG的最長路問題(滑雪)

◇◇◇◇◇◇◇◇DAG的路徑計數問題

◇◇◇◇◇◇◇◇無限揹包和0/1揹包問題

◇◇◇◇啓發式搜索

◇◇◇◇◇◇◇◇A*算法 

 


 實現方案:

(1)實現語言:標準C、有些實現會再用Python寫(後期計劃)。

(2)通用性:做爲demo級別,一般只支持簡單內建數據類型,比較適合OJ刷題。

(3)工程性:前期大部分實現都不加入錯誤檢查,後期考慮用assert()或<setjmp.h>,通常假定輸入數據合法。

至於C語言中基本的模塊封裝方法(文件分離、extern和static的linkage)只能在函數接口組前面加註釋public和private來模擬(提示)。

儘可能設計好接口(函數原型),由於接口的設計關係到代碼的複用性。

(4)代碼風格:我一直比較喜歡Linux kernel Style,但略有不一樣。代碼儘可能作到自注釋,我認爲有必要的地方會有簡單註釋。

(5)讀者定位:本身,以及數據結構和算好初級愛好者。

由於只有本身看得爽,纔會常常翻閱,纔會不斷更新和完善,因此第必定位就是本身。

第二定位是給與我水準差很少的同窗,供參考及吐槽,因此通常demo附帶的說明部分不會作最基礎的解釋,而是儘可能寫一些本身的我的理解。

(6)下一目標:SGI STL問題集(所有C++實現 並對比和學習源碼)

 


 主要參考書籍:(代碼均獨立實現,即便個別有參照也是本身理解後獨立敲出來)

《算法競賽入門經典》 劉汝佳

《Algorithm In C》(Part 1~4) Robert Sedgewick

《The Algorithm Design Manual》(ADM) Steven. S. Skiena

《Introduction To Algorithrm》 (CLRS) Thomas. H. Cormen等

 


 #問題集維護策略技巧等 link(private) 

 

 

 #返回上一級

相關文章
相關標籤/搜索