原创 2、動態數組實現棧的實現

一、棧的簡單介紹 1、棧是一種線性結構。我們可以通過數組和鏈表實現。它依賴的原則是先進後出的原則。 2、棧可以實現括號匹配,表示式計算等功能。 3、我們在在平常的函數調用中,都可能用到棧和隊列。 二、棧的數組實現方式。 1、利用我們前面學

原创 一、原碼反碼補碼的相互轉換

原文鏈接:https://www.cnblogs.com/sakurayj/p/10253911.html 1、首先,正數的原碼,反碼,補碼相同。我們在這裏不討論。 2、 我們來討論負數的原碼反

原创 22、hash表的介紹(上)

一、簡答介紹 一、hash 函數的三個設計要素 1. 散列函數計算得到的散列值是一個非負整數; 2. 如果 key1 = key2,那 hash(key1) == hash(key2); 3. 如果 key1 ≠ key2,那 hash(

原创 21、基於鏈表實現的LRU算法

一、簡單介紹 1、LRU 中文意思是 最近最少訪問緩存淘汰,在我們的生活中到處可見。當我們用鏈表實現是需要O(n)時間複雜度。 2、我們需要維護一個按照訪問時間從大到小有序排列的鏈表結構。因爲緩存大小有限,當緩存空間不夠,需要淘汰一個數據

原创 20、redis底層實現跳錶

一、簡單介紹 1、我們爲什麼要使用跳錶? 當我們使用對一個鏈表進行查找的時候,我們需要的時間複雜度是O(n)。我們沒有辦法對一個有序的鏈表進行二分查找。 當我們使用跳錶實現,我們查找效率會很高,是O(logn)。 2、跳錶的時間複雜度分析

原创 18、基數排序

1、簡單介紹 1、對電話號碼進行排序我們這里也可以藉助相同的處理思路,先按照最後一位來排序手機號碼,然後,再按照倒數第二位重新排序,以此類推,最後按照第一位重新排序。經過 11 次排序之後,手機號碼就都有序了。 2、基數排序:根據每一位來

原创 17、桶排序

1、簡單介紹 核心思想是將要排序的數據分到幾個有序的桶里,每個桶里的數據再單獨進行排序。桶內排完序之後,再把每個桶里的數據按照順序依次取出,組成的序列就是有序的了。 1、穩定性:桶排序是穩定的排序。 2、時間複雜度:O(n) 3、它不是原

原创 19、二分查找

一、簡單介紹 二分查找針對的是一個有序的數據集合,查找思想有點類似分治思想。每次都通過跟區間的中間元素對比,將待查找的區間縮小爲之前的一半,直到找到要查找的元素,或者區間被縮小爲 0。O(logn) 驚人的查找速度。 我們二分查找可以分成

原创 16、計數排序

1、簡單介紹 1.計數排序的特點,計數排序最大的特點是穩定,並且排序的元素,之間的值差別不大。 2、計數排序是一個穩定的排序,我們需要了解既然它只能夠對整數進行排序,爲什麼還要保證其穩定性。 3、既然如果保證穩定性,並且不只是對整數進行排

原创 15、快速排序和歸併排序

1、簡單的介紹 1、歸併排序的核心思想:我們將把數組中的元素分成兩部分,對左邊元素進行排序,對右邊元素進行排序。然後對左右兩邊元素,進行歸併操作。 1、歸併排序是穩定的。歸併的過程,如果兩個元素相等,先把左邊的元素進行歸併。 2、歸併排序

原创 14、簡單的排序算法

一、算法時間複雜度分析 1、我們考慮一個排序算法的好壞,我們首先是應該考慮的點,    有最好時間複雜度,最壞時間複雜度,平均時間複雜度。 2、時間複雜度的係數,常數 和低階。 3、比較的次數和交換的次數。 4、額外空間複雜度。(原地排序

原创 11、堆的刪除操作(中篇)

一、堆得刪除操作的簡單思路 1、首先我們判斷堆是不是爲空,然後獲取我們的堆頂元素,和我們的最後一個元素,進行交換。 2、我們刪除我們的最後一個元素,刪除的元素,就是我們的堆頂元素,如果是最大堆,是最大元素,如果最小堆,就是最下元素。 3、

原创 12、最大堆和最小堆 的實現(下篇)

一、簡單介紹 1、我們前面已經用最大堆得例子,已經講了所有的最大堆的操作。 裏面包過添加操作,用到我們shiftUp()操作。 包過刪除操作,我們用到sihftDown操作。 然後就是通過一個數組,我們能夠構建一個堆。也就是我們說的hea

原创 13、遞歸代碼的書寫

一、簡單介紹 1、遞歸的本質 遞歸的本質:將原來的問題,轉換成更小的同一個問題。 2、遞歸的實現條件 一個問題的解可以分解成幾個子問題的解。 這個問題與與分解的子問題,除了數據規模不同,求解完全一樣。 存在遞歸終止條件。 3、遞歸的兩個

原创 9、二分搜索樹的刪除(下篇)

一、簡單介紹。 1、二分搜索樹的刪除操作,其實並不簡單,我們需要找到我們要刪除的元素。然後分情況考慮。 第一種,沒有左孩子,我們直接獲取一個節點,保持其右孩子,然後進行讓要刪除的節點的右孩子至於空,然後返回其右孩子。 第二種,沒有右孩子,