數據結構與算法之美學習筆記:第六講

今天咱們來聊聊「鏈表(Linked list)」這個數據結構。學習鏈表有什麼用呢?爲了回答這個問題,咱們先來討論一個經典的鏈表應⽤場景,那就是LRU緩存淘汰算法。算法

緩存是一種提升數據讀取性能的技術,在硬件設計、軟件開發中都有着很是普遍的應用,好比經常使用的CPU緩存、數據庫緩存、瀏覽器緩存等等。數據庫

緩存的大小有限,當緩存被用滿時,哪些數據應該被清理出去,哪些數據應該被保留?這就須要緩存淘汰策略來決定。常見的策略有三種:數組

  1. 先進先出策略FIFO(First In,First Out)、
  2. 最少使用策略LFU(Least Frequently Used)、
  3. 最近最少使用策略LRU(Least Recently Used)。

這些策略你不用死記,我打個比方你很容易就明白了。假如說,你買了不少本技術書,但有⼀天你發現,這些書太多了,太佔書房空間了,瀏覽器

你要作個大掃除,扔掉那些書籍。那這個時候,你會選擇扔掉哪些書呢?對應一下,你的選擇標準是否是和上面的三種策略神似呢?

好了,回到正題,咱們今天的開篇問題就是:如何⽤鏈表來實現LRU緩存淘汰策略呢? 帶着這個問題,咱們開始今天的內容緩存

一、表和數組的區別

一、底層的存儲結構看

二、若是散列表中有10個數據

2、常見的鏈表結構

一、基本概念

 

二、單鏈表

一、查找

 

 

二、刪除

三、雙向鏈表

一、什麼是雙向鏈表

 

二、單鏈表和雙向鏈表存儲上的區別

三、雙向鏈表的應用場景

 

3、雙向鏈表比單向鏈表高效

一、刪除操做

一、刪除結點中「值等於某個給定值」的結點

 

二、刪除給指定指針指向的結點

 

三、在鏈表的某個指定節點前面插入一個結點

二、有序鏈表

三、雙向鏈表的應用更加普遍

四、循環鏈表

 

4、常見鏈表結構總結

一、用空間換時間

 

二、時間換空間

 

三、總結

 

四、雙向循環鏈表

 

5、鏈表VS數據性能大比拼

 

一、時間複雜度

 

二、數組的優勢

 

三、數組的缺點

 

四、Java中的ArrayList容器

五、數組的應用場景

 

6、解答開篇

一、如何實現LRU緩存淘汰算法

二、如今咱們來看一下m緩存的訪問時間複雜度

相關文章
相關標籤/搜索