原创 C++編程思想學習筆記---第14章 繼承和組合

繼承是面向對象程序設計的基石 14.1 組合語法 下面一段代碼把類型X的一個對象作爲公共對象嵌入到一個新類內部,實現了組合的語法。 //: C14: useful.h //A class to reuse #ifndef USEFUL

原创 次優二叉樹 --- 折半查找在元素不等概情況下的改進

1、次優查找樹是折半查找的一種一般形式,其理論基礎是“被查找的各元素是不等概的”,而折半查找就是等概的,我們在使用中默認了這一性質。 比如,對於有序數組 int a = {1,2,3,4,5}; 用折半查找時,應該現比較最中間的3,

原创 Trie樹的c++實現

關於Trie樹的理論的東西,各位大神都已經說得很多了。參見這裏是Trie樹的簡單介紹或者這裏是它和其他一些樹結構的使用場景。 Trie樹又稱“字典樹”或“前綴樹”,常見於小規模地統計詞頻,典型的用空間換時間。下面是我的一種c++實現,記

原创 C++編程思想學習筆記---第13章 動態創建對象

一個空中交通指揮系統需要處理多少架飛機?一個網絡中將會有多少個節點?爲了解決這個普通的問題,我們需要在運行時可以創建和銷燬對象是最基本的要求。當然C早就提供了動態內存分配 函數malloc()和free(),它們可以從堆中分配存儲單元。

原创 LeetCode: 113. Path Sum II

這道題折磨了我好長時間,終於通過了所有test。語言c++,時間16ms。成就感能讓我繼續努力,所以記錄一下。 題目在這裏Path Sum II,題目的意思是定義從二叉樹的根結點到葉子結點爲一條路徑,將路徑上所有結點的值加起來是該路徑的和

原创 第6章 樹和二叉樹 要點提煉

6.2 二叉樹 6.2.1 二叉樹的定義 二叉樹是一種特殊的樹型結構,它的特點是每個結點至多隻有兩棵子樹,並且二叉樹的子樹有左右之分,其次序不能任意顛倒 6.2.2 二叉樹的性質 性質1——在二叉樹的第i層上至多有2i−1 個結點 性

原创 C++編程思想學習筆記---第12章 運算符重載

運算符重載只是一種語法上的方便,只是另一種形式的函數調用。 應當說明,運算符重載不應該被濫用,只有在能使涉及類的代碼更易寫,特別是更易讀時,纔有理由重載運算符 12.1 運算符重載的語法: #include <iostream>

原创 源碼分析redis的有序集合,學習skiplist跳躍表數據結構

最近在看redis源碼,看到跳躍表的插入操作時感覺很頭大,網上各種文章都只是在進行一個原理性的分析,唯獨這篇文章一行一行代碼地講解,非常仔細和透徹。希望能幫助正在閱讀redis源碼的你!文章地址源碼分析redis的有序集合,學習skipl

原创 C++編程思想學習筆記---第15章 多態性和虛函數

多態性(polymorphis)提供了接口與具體實現之間的另一層隔離,從而將”what”與”how”分離開來。多態性改善了代碼的組織性和可讀性,同時也使創建的程序具有可擴展性。 15.1 C++程序員的演變 c程序員可以用三步演變爲C

原创 求任意一顆二叉樹的繁茂度

在《數據結構》嚴蔚敏版上的習題看到這個問題。 繁茂度的定義:各層節點數的最大值與樹的高度的乘積 樹的深度好求,遞歸調用就行了。關鍵在於如何求出各層的最大節點樹?下面是我的一種實現方法: bitree.h #include <iost

原创 基於python的密碼管理工具

如何記住各種各樣的賬戶名和密碼? 這是一個頭疼的問題。 現在各種社區,商業網站,客戶端app,全都使用 用戶名+密碼 或 郵箱+密碼的登陸方式。當你使用了越來越多的服務,就意味着你要管理越來越多的賬戶和密碼,怎麼能把他們都記住呢?因爲你

原创 赫夫曼樹的創建

今天在看《數據結構》(嚴蔚敏版),第6章第6節,講到創建赫夫曼樹的時候,給出的算法沒有實現Select()函數,即選出數組中最小的兩個權值的節點。於是我自己用c++實現了一個版本,考慮到算法的效率問題,我選擇了創建一個小頂堆,每次從堆頂提

原创 華爲經典面試題---大數乘法的c++實現

32位機器上的最大有符號數爲2147483647,最大無符號數是4294967295。這對於實際的計算顯然是不夠的,於是就產生了大數乘法的需求。其思路不算難,按照我們平時計算兩個數的乘積的流程就行了。如果你使用的是c語言等不能動態擴展數組

原创 C++編程思想學習筆記----第11章 引用和拷貝構造函數

11.1 C++中的指針 c和c++指針的最重要區別在於c++是一種類型要求更強的語言。在c中,void* 類型的指針可以隨意地指向其他類型的指針,而c++中必須顯示地使用類型轉換通知編譯器和讀者,這算是它比較嚴謹的地方。 11.2 C