原创 聊聊樹與二叉樹

1.什麼是樹       現實生活中的樹就是有一個主幹,加分支加葉子組成的一種植物,大概如下圖所示         數據結構中的樹是什麼樣子呢?他就像是一個倒着生長的樹,對照着兩幅圖看,是不是很相似。其中圓圈的位置就是數據存放的地

原创 如何使用散列表實現一個O(1)時間複雜度的LRU緩存算法

1.散列表       什麼是散列表呢?我舉這樣一個例子,記得小時候家裏只有一個座機,但是這個座機不能存電話號碼,於是只能將要聯繫的人的電話號碼寫在一個本子上。時間久了本子上的電話號碼越來越多。然後這個時候要去找某一個指定的聯繫人的時候

原创 肝了幾天我算是理解了紅黑樹

1.二叉排序樹       在學習紅黑樹之前我們需要了解一下二叉排序樹,所謂二叉排序樹就是一種特殊的二叉樹,首先滿足二叉樹的性質,然後它存儲數據的方式是左邊節點比父節點的數據小,而右邊節點比父節點數據大。這樣當我們查詢一個數據時,比如我

原创 Java中爲什麼判斷引用數據類型是否爲null不能使用equals

java中所有類的頂層父類是Object,而Object中的equals是比較的兩個引用類型的地址,並不是比較的兩個引用類型的值,一般情況下我們並不需要比較地址值是否相等,所以需要覆寫equals取比較值,覆寫的equals方法如

原创 爲什麼插入排序比冒泡排序更受歡迎?

1. 插入排序和冒泡排序的時間複雜度      插入排序和冒泡排序的時間複雜度相同,都是 O(n2),在實際的軟件開發裏,爲什麼我們更傾向於使用插入排序算法而不是冒泡排序算法呢?   2. 先看一下排序算法的幾個概念 1.原地排序

原创 非比較排序--基數排序實現給字符串數組排序

1.計數排序的侷限性       前面學習了計數排序,可以實現O(n+k)的時間複雜度,但是他有很大的侷限性,最大的問題就是如果最大值和最小值之間相差太大的話,那麼會浪費掉很大的空間,比如要排序{1,10000,99,64,120}我們

原创 非比較排序-計數排序

1.計數排序       前面學習了歸併排序,快速排序時間複雜度爲O(n*logn)而有沒有比這更快的排序算法呢?當然是有的那就是計數排序,首先計數排序並不是比較排序算法,而是利用數組來實現的一種算法,想象一下這樣一個場景,假如給數組{

原创 《大話數據結構》隊列的順序存儲和鏈式存儲

1. 簡介   成都的火車南站早上真的恐怖,地鐵站人山人海,從地鐵裏面一直排隊到門口,雖然人很多但是不得不說我國人民素質還是蠻高的,都是來了之後排在隊伍的最後面,沒有一個人去插隊。這樣不僅避免了人員擁擠的混亂,也讓需要乘坐地鐵的人可以儘