目錄
- 一、資料結構
- 1. 邏輯結構
- 2. 存盤結構
- 3. 運算操作
- 二、演算法
在計算機科學中,資料結構(Data Structure)是計算機中存盤、組織資料的方式,為什么資料結構和演算法經常放在一起討論?演算法用來設計一種使用計算機來解決問題的方法,設計高效的演算法又是怎么來實作的?在我們學習了計算機編程后,也要學習資料結構與演算法這些基礎內容,
一、資料結構
人們常說:程式 = 資料結構 + 演算法,當遇到一個問題,或有一個需求時,在設計程式來解決問題時,其中重要一步就是設計資料結構,資料結構在問題解決中主要用來:
- 存放要處理的資料
- 實作演算法策略
資料結構可以用一個四元組來表示:
DataStructure = (D, L, S, O)
它包括資料元素(D)、資料元素之間的邏輯關系(L)、邏輯關系在計算機中的存盤結構(S)和所規定的操作(O)這四部分,

1. 邏輯結構
邏輯結構是指資料元素之間客觀存在的關系,和資料在計算機中怎么存盤無關,主要用于人們理解和交流以及指導演算法的設計,邏輯結構分為四類:
- 線性結構:資料元素之間存在一對一的關系
- 樹形結構:資料元素之間存在一對多的關系
- 圖形結構:資料元素之間存在多對多的關系
- 集合結構:資料元素屬于同一個集合

學習研究了這四種邏輯關系是如何存盤與操作后,以后我們要解決任何問題,只要分析出要解決問題的資料關系,都可以通過這四種邏輯關系來思考,如果關系比較復雜,也是由這四種關系組成的,只要一層一層地分析就可以了,
2. 存盤結構
邏輯結構主要用于演算法設計,而存盤結構用于指導演算法編程實作,存盤結構有基本的兩種結構:
- 順序存盤:邏輯上相鄰的元素存盤在物理位置相鄰的存盤單元中
- 鏈式存盤:在資料元素中添加一些地址域或輔助結構,用于存放資料元素之間的關系

順序存盤結構在記憶體中的地址是連續的,所以存取速度很快,但是在插入或洗掉操作效率低,因為插入或洗掉操作會移動資料元素,
鏈式存盤結構在記憶體中地址可以是不連續的,插入和洗掉操作效率高,因為增加了尋址的操作,所以查找和遍歷效率低,
同樣的邏輯結構(線性、樹形、圖形、集合)既可以采用順序存盤結構也可以采用鏈式存盤結構來存盤資料和關系,存盤結構的選擇主要考慮演算法的效率,演算法的時間和空間哪個更好,具體選擇哪種和需求有關,基本存盤結構既可以單獨使用,也可以組合使用,

3. 運算操作
資料結構中的操作主要是指資料元素的查找、插入、洗掉、遍歷和排序等等,具體需要實作的操作根據業務需求確定,
二、演算法
演算法用來設計并實作一種用計算機來解決問題的方法,它滿足下列性質:
- 輸入:有零個或多個輸入量
- 輸出:產生至少一個輸出量
- 確定性:演算法的指令清晰、無歧義
- 有限性:演算法的指令執行次數有限,執行時間有限

在使用計算機解決問題的程序可以分為下面五個步驟:
- 問題的理解:搞清楚問題的輸入、要求和輸出
- 資料結構設計:設計能處理問題中資料的資料結構,還要設計能支持演算法策略的資料結構
- 演算法設計:選擇演算法策略,用適當的方式描述和逐步細化演算法步驟
- 演算法分析:發現有優化的地方,回傳第二步,重新設計資料結構和演算法
- 程式實作:用計算機編程,定義資料結構,撰寫代碼實作,并除錯和運行

一個需求問題有多種解決方案,我們經常需要通過不斷嘗試和積累經驗才能找到最好的方案,如果熟練掌握了基本的資料結構和演算法,對于在設計高效演算法中是有很大幫助的,能更高效地解決需求問題,
本文來自博客園,作者:碼匠_CodeArtist,轉載請注明原文鏈接:https://www.cnblogs.com/code-artist/p/ds-1.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538784.html
標籤:Java
上一篇:如何定位線上問題?
下一篇:每日演算法之數值的整數次方
