數據結構概述及概念

2020-12-25 道IT

開始新的學習之旅了,朋友們準備好了嗎?下面的一段時間筆者將和大家一起複習以下數據結構這門基礎的課程。

不知道大家有沒有跟筆者一樣的情況,一直在說數據結構,數據結構,那什麼是數據結構呢?

一 概念

先賣個關子,我們來看一個開發中常見的場景:

一個用戶在使用我們系統的時候,註冊了一個帳號,我們在業務處理中根據註冊信息,通過一系列處理生成一個User對象。

然後通過save方法保存到資料庫中,這樣以後我們就可以直接從這個表中讀取用戶信息了。

好,現在我們來看一下數據結構的概念:

1. 數據結構,英文是data structure,其實名字已經很清晰了。

這是一門專門處理數據的學科,數據元素相互之間的關聯稱為結構,描述的是存儲和組織數據的方式。

按照書中的說法,數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。

下面我們就繼續明確幾個概念。

2. 數據:對客觀事物的符號表示,指所有能輸入到計算機中並被電腦程式處理的符號的總稱。

上面場景中的註冊信息,就是數據。資料庫中存儲的用戶記錄,那也是數據沒跑了。

3. 數據項:數據項是數據的不可分割的最小單位。

這個不用太困惑,如上圖所示的用戶表中的id,accont,password等每一個欄位,都是一個數據項。

4. 數據元素:數據的基本單位,在計算機中作為一個整體進行考慮和處理。一個數據元素由多個數據項組成。

那就比較好理解了,用戶表中的每一條User記錄就是一個數據元素。

5. 數據對象:性質相同的數據元素的集合,是數據的一個子集。

這裡要記住集合這個概念,所有的用戶組合到一起是數據對象,所有的女性用戶也是一組數據對象。

二 數據結構和數據類型

通常數據結構有四種結構:

1. 集合

2. 線性結構

3. 樹形結構

4. 圖(網)狀結構

上面說都是數據的邏輯關係,數據結構中的物理結構(存儲結構)有兩種:

1. 順序存儲結構

2. 鏈式存儲結構

下面再介紹一個概念,數據類型——一個值的集合和定義再這個值集上的一組操作的總稱。

注意:這個概念中說的,不只包含值的集合,還包含對值集的操作。

數據類型又分為兩類:

1. 原子類型:值不可再分割。比如Java中的int,char,String等。

2. 結構類型:由若干成分按某種結構組成,可以被分解。比如一個整型數組,可以循環分割成多個整型元素。

還有兩種不太常見的數據類型

1. 抽象數據類型(ADT):指一個數學模型以及定義在該模型上的一組操作,或者我們可以把它理解成我們開發過程中自己定義的數據類型。

筆者認為它與基本數據類型的並沒有本質的區別,主要在於抽象數據類型更貼近於實際的使用。

2. 多形態數據類型:指其成分不確定的數據類型,筆者認為這個不太重要,了解一下就可以了。

三 算法和算法分析

算法是對特定問題求解步驟的一種描述,說白了就是我們通過解決問題的程序代碼,就可以說是算法。

算法具有以下5個特徵:

1. 有窮性:算法必須在執行有限個步驟之後終止。

2. 確定性:算法的每一步驟必須有確切的定義,相同的輸入只能得出相同的輸出。

3. 可行性:或者叫有效性,每個計算步都可以在有限時間內完成。

4. 輸入:一個算法由零個或多個輸入。

5. 輸出:一個算法有一個或多個輸出。

好的算法的評判標準:

1. 正確性:滿足具體問題的需求。

2. 可讀性:容易被人所理解。

3. 健壯性:對輸入的非法數據,能偶適當的進行處理。

4. 效率與低存儲量需求:儘量使算法的執行時間越短,運行時佔用的空間更小。

算法效率的度量:

1. 事後統計的方法:對運行結果進行統計分析,得出執行效率。

2. 事前分析估算:估算算法的時間複雜度——算法的時間複雜度是一個函數,它定性描述了該算法的運行時間。這是一個關於代表算法輸入值的字符串的長度的函數。

時間複雜度常用大O符號表述,如O(1),O(n),O(n)等,不包括這個函數的低階項和首項係數。

一般我們最常用的辦法是討論算法在最壞情況下的時間複雜度。

喜歡文章或想一起學習的朋友可以關注我,給我點讚,我將會持續更新,有什麼疑問或文中有不當之處請給我留言,真誠地希望能與大家一起交流探討,學習進步!

相關焦點

  • 數據結構的基本概念
    (一)什麼是數據結構數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。
  • java數據結構系列——什麼是數據結構
    數據結構系列文章我是抱著學習的心態來寫的。如果有哪些地方寫得不好的,解釋不到位的,寫的有問題的,希望大家可以提出來,幫我糾正。也希望可以和大家共同成長,一起進步。那麼什麼是數據結構呢,不知道大家有沒有一個概念?其實有一段時間我對所謂的「數據結構」一直是不理解的,我不太清楚它到底是個什麼東西。不知道大家是不是也這樣?
  • 數據結構基本概念
    (3)數據結構數據結構是指所涉及的數據元素以及數據元素之間的關係,可以看作是相互之間存在著特定關係的數據元素的集合。可時把數據結構看成是帶結構的數據元素的集合。(4)數據元素之間的關係 結構,現實世界的結構是紛繁複雜的數據結構中討論的元素關係主要是指相鄰關係或鄰接關係。
  • 理解結構概念,認識結構作用----單元2:數據結構的教學建議(3)
    適度,就是要求在教學中對概念的要求深淺適度,對操作的要求要難易適度;得法,就是根據不同的教學需求,採用適合的教學方法。在《標準》中涉及數據結構相關概念的要求既有「理解數據結構的概念」這樣的總的要求,更有「理解數組、鍊表等基本數據結構的概念」、「理解包括字符串、隊列、棧在內的線性表的概念」、「了解二叉樹的概念」等涉及某類數據結構的具體要求。
  • PCIe系列專題之三:3.0 數據鏈路層概述
    一、故事前傳之前我們講了對PCIe的一些基礎概念作了一個宏觀的介紹,了解了PCIe是一種封裝分層協議(packet-based layered protocol),主要包括事務層(Transaction layer), 數據鏈路層(Data link layer)和物理層(Physical layer)。
  • 《大話數據結構》pdf下載
    以一個計算機教師教學為場景,講解數據結構和相關算法的知識。通篇以一種趣味方式來敘述,大量引用了各種各樣的生活知識來類比,並充分運用圖形語言來體現抽象內容,對數據結構所涉及到的一些經典算法做到逐行分析、多算法比較。與市場上的同類數據結構圖書相比,本書內容趣味易讀,算法講解細緻深刻,是一本非常適合自學的讀物。本書以一個計算機教師教學為場景,講解數據結構和相關算法的知識。通篇?
  • 概述Java中的數據結構是什麼及其內部實現原理
    本文主講介紹幾種常用的數據結構,數據結構是一種容器的一個分支,容器時用來裝東西的,那麼數據結構就是專門用來存儲數據的容器。首先我們從數組來給大家漸漸引入數據結構,容器的概念。那麼數組是什麼呢,數組是一個對象,準確的說我們將對象進行分類,具有特定功能的對象就被成為數據結構或者容器,集合等,數組就是其中之一。
  • 資料| 數據結構與算法 JavaScript 描述
    內容簡介 · · · · · ·通過本書的學習,讀者將能自如地選擇最合適的數據結構與算法,並在JavaScript開發中懂得權衡使用。此外,本書也概述了與數據結構與算法相關的JavaScript特性。數組和列表:最常用的數據結構。棧和隊列:與列表類似但更複雜的數據結構。鍊表:如何通過它們克服數組的不足。字典:將數據以鍵-值對的形式存儲。散列:適用於快速查找和檢索。集合:適用於存儲只出現一次的元素。二叉樹:以層級的形式存儲數據。圖和圖算法:網絡建模的理想選擇。
  • 數據模型概念及類型劃分
    2)數據操作:數據模型中數據操作主要描述在相應的數據結構上的操作類型和操作方式。  3)數據約束:數據模型中的數據約束主要描述數據結構內數據間的語法、詞義聯繫、他們之間的制約和依存關係,以及數據動態變化的規則,以保證數據的正確、有效和相容。  類型  數據模型按不同的應用層次分成三種類型:分別是概念數據模型、邏輯數據模型、物理數據模型。
  • IoT 輕量級協議(1)| CoAP 協議概述與報文結構
    物聯網的初衷之一是通過大數據的採集分析去顛覆交通、運輸、物流、能源等生產生活的每個方面。一般而言,物聯網遇到的最大的問題是環境的不穩定性,也就是沒有穩定的電源,並且無線網絡的帶寬、延時、丟包等問題都比較突出。因此,物聯網領域一般使用輕量級的協議,如知名的消息協議 MQTT、XMPP、CoAP 協議。今天,我們來了解下 CoAP 協議概述和報文結構。
  • 什麼是數據的存儲、邏輯結構和數據的運算?
    2,據項是組成數據元素的基本單位,就如表中的一個名字或者一個編號。為什麼要先了解數據元素和數據項呢?因為數據結構的三個基本概念可以說就是這些基本單位之間的某種關係。一般書面裡的定義是這樣說的:數據結構就是相互之間存在一種或多種特定關係的數據元素的集合。
  • 文件結構概述:PNG格式
    概述在CTF比賽中,常見各種文件的隱寫題目。而圖片格式,常見的題目類型有LSB隱寫、圖片尺寸篡改、jphide隱寫等。本文將介紹PNG的文件結構內容,輔助解決CTF中遇到的圖片隱寫問題。什麼是 PNGPNG 是20世紀90年代中期開始開發的圖像文件存儲格式,其目的是替代 GIF 和 TIFF 文件格式,同時增加一些 GIF 文件格式所不具備的特性。
  • 計算機網絡的七層結構、五層結構和四層結構,別再傻傻分不清了
    ,五層體系結構。OSI體系結構: 概念清楚,理論也比較完整,但是它既複雜又不實用。TCP/IP體系結構:TCP/IP是一個四層體系結構,得到了廣泛的運用。五層體系結構:為了方便學習,折中OSI體系結構和TCP/IP體系結構,綜合二者的優點,這樣既簡潔,又能將概念講清楚。
  • 新手必知的Python數據結構詳解
    作者 | 七寸法師,Python開發工程師,慕課網精英講師來源 | 慕課網(imooc.com)概述數據結構是組織數據的方式,以便能夠更好的存儲和獲取數據。數據結構定義數據之間的關係和對這些數據的操作方式。
  • Python基石 | Python中的數據結構詳解
    概述在深入研究數據科學和模型構建之前,Python中的數據結構是一個需要學習的關鍵內容
  • 剪力牆結構的概念、種類和布置原則
    剪力牆結構概述一、剪力牆結構的概念建築施工中所有由鋼筋混凝土牆體構成的承重體系均稱為剪力牆結構。剪力牆結構不僅能承受較強的豎向荷載,還能承受住由風力或地震所形成水平作用力。這種結構最大的優勢在於它可以有效減少建築結構的整體側移、提高其抗震性能、保證牆面及空間的平整度。二、剪力牆結構的種類剪力牆結構主要分為以下三種類型:第一,整體牆剪力牆。這種剪力牆是指沒有門窗洞日或洞日較少甚至可以忽略不計的牆體。
  • 理解資料庫與數據模型的概念
    信息世界是對現實世界的抽象,人們把事物的特徵和聯繫通過符號記錄下來,並用規範化的語言描述現實世界的事物,從而構成一個基於現實世界的信息世界,這個信息世界就是概念模型。概念模型主要用來描述顯示世界的概念化結構,它使資料庫的設計人員在設計的初始階段,擺脫計算機系統及資料庫管理系統的具體技術問題,集中精力分析數據以及數據之間的聯繫。
  • PCIe系列專題之二:2.4 Flow Control機制概述
    *故事前傳*PCIe事務層Flow Control概述一、故事前傳之前我們講了對
  • Web前端:1、HTML&CSS概述及結構
    根據W3C標準,一個網頁主要由三部分組成:(1)結構:HTML用於描述頁面的結構(2)表現:CSS用於控制頁面中元素的樣式(3)行為:JavaScript用於響應用戶操作01HTML概述全稱:HyperText Markup Language(超文本標記語言),定義頁面內容結構,該語言書寫的代碼通常會被瀏覽器解析執行。
  • 淺談結構抗震概念
    而且又放在考慮扭轉耦聯裡,把扭轉拉進來就更不對了(規則對稱結構也要用CQC)。其實規範條文說的都是模態相關性的問題,正文非得用扭轉耦聯這個不專業的詞彙,以至於幾乎所有的相關規範和著作文章都跟著抗規跑」。 很多概念的理解,我是在寫的過程中和讀者及各位朋友的互動中,思考的一個觀點,很多不一定正確,有時寫著寫著會發現以前的概念是錯誤的,希望大家給予批評指正。