原创 單例模式

轉自:http://blog.csdn.net/jason0539 概念:   Java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,這裏主要介紹三種:懶漢式單例、餓漢式單例、登記式單例。   單例模式有以下特點:   

原创 有向圖的十字鏈表表示

本文主要討論有向圖的十字鏈表表示,包括建圖,添加弧,刪除弧,以鄰接表的格式打印圖(其中包括兩種形式:1,同尾的弧構成條鏈 2,同頭的弧構成條鏈)c ++ 描述。 參考《數據結構 c語言版》清華大學出版社 類 ArcBox 包含弧的信息

原创 無向圖的深度優先生成森

對於無向圖,從任意一個頂點出發,根據深度優先遍歷,可以得到一個連通分量。對於非連通圖,每一次從一個未訪問的頂點出發,可以得到多個連通分量。將這些通過深度優先遍歷求得連通分量構成一棵棵生成樹,並以兄弟孩子鏈表,將這些生成樹以森林的形式存儲。

原创 紅黑樹(一)

本文將參照算法導論和維基百科討論紅黑樹。 主要內容包括紅黑樹的性質,插入新節點。刪除節點將單獨成一篇。 1.性質 紅黑樹是一種特殊的二叉排序樹,並且每一個節點帶有顏色屬性。另外還有以下 5 點性質: 節點是黑色或者紅色 根節點爲黑色

原创 經典排序算法3:堆排序

本文根據算法導論第6章,介紹最大堆的操作。包括:構建最大堆,維護最大堆,堆排序,以及對在優先隊列中的應用。對最大優先隊列執行以下操作:向隊列中插入新元素,增加某個元素的值,去掉並返回隊列中的最大值並保證最大隊的性質。 首先定義滿二叉樹:

原创 動態規劃之0-1揹包問題

下面這篇博文講述的原理淺顯易懂,但是他沒有輸出哪些被選擇了。 http://blog.renren.com/share/228709498/2675290555 本文在這一篇的基礎上進行改進:重構被選擇的金礦。 矩陣 maxGold

原创 java 的 equals()方法

轉載:http://www.cnblogs.com/yxnchinahlj/archive/2010/09/27/1836556.html 1.equals的本意——即在Object對象中定義的equals()方法有什麼樣的意義。 (此

原创 二叉搜索樹

本文主要討論二叉搜索樹的基本性質以及基本操作,並用C++代碼實現,每個成員操作以成員函數的形式出現,並附有適當的說明。 包括: 普通二叉樹的遍歷(先序,中序,後序,分層),二叉搜索樹的建立,插值,刪值,求前驅,求後繼,求size,求最

原创 平衡二叉樹(AVL)(一)

平衡二叉搜索樹是具有某些特殊性質的二叉搜索樹,對於每一個節點 p , 它的左右子樹的高度相差不超過 1。將二叉排序樹維持在平衡狀態。因此查找,刪除,插入的操作的時間複雜度維持在O(log2n) . 查找元素,遍歷,找最大最小值,求樹的高

原创 經典排序算法2:歸併排序

本文主要介紹歸併排序的基本原理,基於遞歸調用,一步一步分析,結合流程圖和文字,給讀者清晰地解釋。另外給出僞代碼,和C++核心代碼。並和插入排序相比較,最後結合插入排序,介紹一種升級的歸併排序。 基本原理 歸併排序利用分治法的思想,具體算法

原创 101. Symmetric Tree

C++ 代碼 iterative:(用到二叉樹的層序遍歷算法) /** * Definition for a binary tree node. * struct TreeNode { * int val; *

原创 紅黑樹(二)

參照維基百科 本篇將詳細討論紅黑樹節點的刪除。 如果需要刪除的節點有兩個兒子,那麼問題可以被轉化成刪除另一個只有一個兒子的節點的問題(爲了表述方便,這裏所指的兒子,爲非葉子節點的兒子)。對於二叉查找樹,在刪除帶有兩個非

原创 文件讀取和寫入

從txt 中讀取數據 在測試過程中,爲了避免每次手動輸入數據,可以將固定的數據存儲在txt文件中,每次執行文件時只需從文件中讀入固定的數據就行了。 如果每一個數據本身不含空格,則相鄰兩個數據之間以若干個空格或者若干行隔開,通過不同的

原创 經典排序算法1:插入排序

本文講述幾大經典排序算法之一–插入排序的基本原理,詳細步驟,C++完整代碼實現,複雜度分析。 1. 插入排序基本原理: 將一個序列分爲兩部分: 已排好序的和未排序的。將爲排好序的序列裏的元素一次插入已排序序列的合適位置,直到未排序序列爲空