鍊錶無法讀取記憶體 C 陣列和鍊錶的區別

2021-10-18 04:32:26 字數 1304 閱讀 3296

①插入(或刪除)乙個元素:

鍊錶:不需要改變記憶體的位址,只需要修改節點的資訊即可(包括指標指向,節點值),光討論插入這個操作的話,平均時間複雜度是o(1),但是如果不知道插入(或刪除)的位置的時候,找到該位置的平均時間複雜度是o(n),所以整個插入(或刪除)操作的平均時間複雜度也是o(n)。

②擴充套件性:

查詢陣列和鍊錶的時間複雜度是o(n)

查詢陣列和鍊錶的時間複雜度是o(n),但是在實際中確實陣列的速度要比鍊錶快,這是為什麼呢?
cpu快取會把一片連續的記憶體空間讀入

1. 暫存器是**處理器內的組成部份。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、資料和位址。在**處理器的控制部件中,包含的暫存器有指令暫存器(ir)程式計數器(pc)。在**處理器的算術及邏輯部件中,包含的暫存器有累加器(acc)。

2. 記憶體包含的範圍非常廣,一般分為唯讀儲存器(rom)、隨機儲存器(ram)和快取記憶體儲存器(cache)。

個人裝置的記憶體層級

為什麼暫存器比記憶體快?

1.距離不同 。

暫存器在cpu內部,當然讀起來會快一點,內存在外部的記憶體插槽內,要電流經過電路板進行傳輸
2.硬體設計不同

3.工作方式不同

暫存器就是找到相應的位,然後讀取這些位,兩步操作。

而記憶體則複雜的多

(1)找到資料的指標。(指標可能存放在暫存器內,所以這一步就已經包括暫存器的全部工作了。

(2)將指標送往記憶體管理單元(mmu),由mmu將虛擬的記憶體位址翻譯成實際的實體地址。

(3)將實體地址送往記憶體控制器(memory controller),由記憶體控制器找出該位址在哪一根記憶體插槽(bank)上。

(4)確定資料在哪乙個記憶體塊(chunk)上,從該塊讀取資料。

(5)資料先送回記憶體控制器,再送回cpu,然後開始使用。

記憶體的工作流程比暫存器多出許多步。每一步都會產生延遲,累積起來就使得記憶體比暫存器慢得多。

記憶體,暫存器和cache的區別與聯絡

陣列和鍊錶的區別比較

VS2013鍊錶讀取記憶體失敗,鍊錶套鍊錶

自己寫的乙個鍊錶程式,用gcc編譯正常執行,用vs2013一直報異常。終止,除錯了很久,終於發現了錯誤。class person class state typedef struct tagstatenodestatenode,pstatenode class linkstate typedef s...

陣列和鍊錶

陣列名代表陣列的首位址,陣列的下標其實代表陣列中某個元素相對首位址的偏移量,陣列的第乙個元素是零偏移,因此從 0 開始。上面其實也只是乙個解釋,c 語言設計者用零開始編號,後來的各種語言也便紛紛效仿,因此就形成了這個習慣。單鏈表只支援乙個方向的訪問,第乙個節點稱為頭結點,最後乙個節點稱為尾結點。迴圈...

陣列和鍊錶

術語 在講述陣列和鍊錶之前,我們先了解乙個術語 索引和大o表示法。索引指元素的位置,因此我們不說 元素20的位置為1 而說 元素20位於索引1處 大o表示法指出演算法的速度有多快,演算法執行時間的增速。如o n 中的n指的是 運算元 也就是演算法執行時操作了幾次。有鑑於此,我們不僅要知道演算法需要多...