.
聲明:本人只是分享一些床長人工智慧教程相關的免費pdf文檔而已,並非床長人工智慧網校的收費文章。尊重版權,支持原創!
深入理解數據結構
此文章只是結合自己的認識,不斷學習更新中,僅供參考。
一數據結構介紹
數據結構是人們對數據存儲的需求,所以產生對數據的特點分析,進而產生數據結構。
計算機可以大量對的數據進行處理,所以產生計算機的數據存儲結構,這就是計算機領域的數據結構。
計算機資料庫就是專門對數據存儲和處理的載體。
其採用更高級算法對大量數據進行快速處理,對於軟體開發人員,資料庫可以說是必須掌握的知識。
二計算機存儲方式
由於計算機硬體存儲器決定計算機的存儲方式,所以數據結構離不開計算機的存儲結構。
計算機的存儲方式硬體計算機通過地址線對內存單元進行訪問,例如,容量為,即。
詳細請參考計算機組成原理
所以硬體對一個計算機的性能產生直接影響。
計算機內存
三數據結構分類
根據計算機的存儲結構,所以計算機對數據存儲是有劃分的。
作業系統對數據進行存儲要申請空間,存儲器最小單元為存儲單元的大小按道理計算機可根據算法實現將其拆分為更小單元存儲,當一個存儲單元不夠用時進行多個單元的申請具體看作業系統和程式語言實現的標準或國家標準。
這只是一種設計思想具體實現得按照需求設計。
基本數據類型存儲結構思想
語言基本數據類型,,,,,
基本數據類型,,,,,,,
特點數據按塊分配空間。
比如機器字長為,型為申請為一個內存單元,為申請兩個內存單元
數組存儲結構思想
程式語言基本上都有數組,因為其存儲是連續的,比較方便,數組為某類型數據一次申請固定大小的存儲空間,是物理連續的,即真實地址連續。
特點靜態一次申請,申請之後大小無法改變,物理存儲單元連續。
鏈式存儲結構思想
根據數組的存儲擴展而來的比較高級的存儲結構。
利用對地址的存儲存儲下一個要執行的程序或代碼的地址,進而對地址操作實現地址跳轉。
所以引入指針類型概念,可以進行地址跳轉。
由於程序直接進行地址訪問對作業系統越權,所以太危險了,有寫語言取消了直接對地址的訪問,但是這種思想還在,所以有鏈式存儲結構。
特點動態可進行多次申請內存單元,有可變性,存儲地址實現邏輯連續,利用地址進行跳轉。
四存儲結構的分析
存儲結構的比較數組創建之後無法改變大小,所以不考慮刪除問題
存儲結構
擴展性
訪問速度
特點
基本類型
快
一次分配一個或多個連續存儲單元
數組
不可擴展
中
一次分配多個連續的存儲單元
鍊表
可擴展
慢
按需分配存儲單元,邏輯連續
訪問數組鍊表速度快慢分析
數組存儲物理地址連續,可有規律存取。
利用計算其地址訪問,或按塊加載進中進行後續操作。
對單個數據訪問比如讀取數組第個元素順序結構可以直接,按照首地址和每個數據大小進行計算,直接找出地址為的數據。
若訪問越界,則運算其地址就可以判斷。
對多個數據如果要加載數組所有數據可計算首地址和數組大小及每個數據大小,計算地址範圍對其進行按塊加載。
例如按其規律進行設計只是一種思想,具體實現可參考專業書籍,對四位地址進行處理,取第一位從右往左為,後三位任意,對其選中加載到中進行後續操作。
可實現按塊加載只要硬體能跟上,速度極快。
順序存儲
鍊表存儲邏輯連續,具有動態性,分為數據域因為內存按需申請所以同一個鍊表數據域可以不同,具體看其算法實現和指針域指針域可以有多個,按需求設置,顯而易見數據域存儲數據指針域存儲地址跳轉地址。
對單數據訪問必須從首地址進行操作,一個存儲單元一個存儲單元讀,若讀到跳轉操作則進行跳轉,直到找到目標數據。
例如對鍊表第個數據域進行操作,則只能通過第一個數據域才能找到第二個數據域。
若訪問數據越界,則只有讀取完最後一個數據域才能判斷。
例如對鍊表第個數據域進行操作,則通過第一個數據域找到第二個數據域,讀取完第二個數據域發現沒有數據了,那麼產生錯誤,若繼續對下一個地址讀取則會對計算機產生不可控制性錯誤,危害性極大。
對多個數據進行訪問必須對第一個數據域進行訪問,才能找到第二個數據域的地址讀取其數據直到找完所有數據。
數組和鍊表各有各的特點,具體使用哪種看需求。
高級的數據結構可由數組或鍊表實現,比如,棧隊列樹堆
這些高級數據結構可利用其功能設計目標等需求用數組或鍊表思想實現。
個人看法學習資料庫,數據結構,算法時,回顧一下離散數學內容。。。。