原创 最短路徑——floyd算法

上一篇博文中講了Dijkstra算法,這次博文要講解的是floyd算法,其中Dijkstra算法是屬於貪心算法,而floyd算法是動態規劃的一個算法: 具體的算法如下: 其中一個矩陣是用來存放最短路徑的,另外一個矩陣是用來存放前驅頂點的;

原创 雙向鏈表的實現

上一篇博文介紹瞭如何使用C語言實現單鏈表,這篇博文介紹下雙向鏈表的實現。單鏈表中每個結點只有一個後驅,而雙向鏈表中每個結點都有一個後驅和前驅(除了第一個結點只有一個後驅,最後一個結點只有一個前驅)。雙向鏈表中每個結點具有一個數據域和兩個指

原创 Linux系統下學習正則表達式的心得

一直對正則表達式雲裏霧裏的,今天認真的看了《鳥哥的linux私房菜》一書並在網絡上查詢了相關方面的資料,現在對正則表達式有了一定的瞭解。 首先正則表達式指的是用特定的字符串來篩選符合一定要求的字符串,我們在Linux系統下經常用到的命令g

原创 c++筆試複習

1. 請說出#define和const的區別,都有何優點? (1)const常量是有類型的,而宏是沒有類型的。編譯器可以對前者進行類型的安全檢查,而對後者只是進行字符替換,沒有類型安全檢查; (2)有些集成的調試工具可以對const進行調

原创 鏈表排序

鏈表是一種在物理存儲上非連續,非順序的存儲結構,數據的邏輯關係是通過指針鏈接次序實現的,鏈表通過一系列結點組成,結點可以在運行時動態生成。每個結點由兩部分組成:數據域和存儲下一結點的指針域。鏈表是一種常見的數據結構。 要想進行鏈表排序,首

原创 鏈表隊列的實現

隊列也是數據結構中比較重要的一種,和棧相反的是,隊列是先進先出的,先進隊列的可以先出隊,跟平時我們排隊是一樣的。在允許多通道程序運行的計算機系統中,同時幾個作業運行。凡是申請輸出的作業都從隊尾進入隊列。 現在用鏈表實現隊列,先定義一個鏈表

原创 最短路徑算法——迪傑斯特拉算法(Dijkstra)

圖結構中應用的最多的就是最短路徑的查找了,關於最短路徑查找的算法主要有兩種:迪傑斯特拉算法(Dijkstra)和Floyd算法。 其中迪傑斯特拉算法(Dijkstra)實現如下: 原理就是不斷尋找當前的最優解: void main() {

原创 關於子函數中用new動態申請的空間的思考

當我們的程序在運行時才能決定數組空間的大小的情況下,我們會經常使用new或者malloc來在堆空間中動態的申請一片空間,這是相當的方便和實用的。最近經常使用自己也發現了一些問題以及自己對這些問題的思考: void main() { in

原创 排序二叉樹的實現

在計算機科學中,二叉樹是一種重要的非線性的數據結構。每個結點的度均小於等於2,通常子樹稱爲左子樹和右子樹。而排序二叉樹是二叉樹中的一種,其滿足:1. 如左子樹不爲空,那麼左子樹上的結點的值都小於其根上的值;2. 如右子樹不爲空,那麼右子樹

原创 直接插入排序

直接插入排序是一種比較簡單的排序方法,他的原理類似於我們玩牌的時候抓牌,手中的牌是按照一定的順序排列的,然後摸到的牌先進行查找順序,將牌插到應該插入的地方,直到最後一張牌的插入,那麼手中的牌都是有序的。 數列的直接插入排序也是這樣的,將第