什麼是數據結構?

来源:https://www.cnblogs.com/wupeixuan/archive/2020/02/09/12285993.html
-Advertisement-
Play Games

本篇文章主要來介紹什麼是數據結構。 首先讓我們來看一張圖片: 數據存儲於電腦的記憶體中。記憶體如上圖所示,形似排成 1 列的箱子,1 個箱子里存儲 1 個數據。 數據存儲於記憶體時, 決定了數據順序和位置關係的便是數據結構 。 其實在我們生活中用到很多數據結構的知識,那麼舉一個我們生活中的慄子: 首先舉 ...


本篇文章主要來介紹什麼是數據結構。

首先讓我們來看一張圖片:

數據結構

數據存儲於電腦的記憶體中。記憶體如上圖所示,形似排成 1 列的箱子,1 個箱子里存儲 1 個數據。

數據存儲於記憶體時,決定了數據順序和位置關係的便是數據結構

其實在我們生活中用到很多數據結構的知識,那麼舉一個我們生活中的慄子:

首先舉一個從上往下順序添加舉個簡單的例子。假設我們有1個電話簿——雖說現在很多人都把電話號碼存在手機里,但是這裡我們考慮使用紙質電話簿的情況——每當我們得到了新的電話號碼,就按從上往下的順序把它們記在電話簿上。

假設此時我們想給張飛打電話,但是因為數據都是按獲取順序排列的,所以我們並不知道張飛的號碼具體在哪裡,只能從頭一個個往下找(雖說也可以從後往前找或者隨機查找,但是效率並不會比從上往下找高)。如果電話簿上號碼不多的話很快就能找到,但如果存了500個號碼,找起來就不那麼容易了。

再比如我們可以按姓名的拼音順序對電話簿進行排列,接下來,試試以聯繫人姓名的拼音順序排列吧。因為數據都是以字典順序排列的,所以它們是有結構的。

使用這種方式給聯繫人排序的話,想要找到目標人物就輕鬆多了。通過姓名的拼音首字母就能推測出該數據的大致位置。

那麼,如何往這個按拼音順序排列的電話簿里添加數據呢?假設我們認識了新朋友柯南並拿到了他的電話號碼,打算把號碼記到電話簿中。由於數據按姓名的拼音順序排列,所以柯南必須寫在韓巨集宇和李希之間,但是上面的這張表裡已經沒有空位可供填寫,所以需要把李希及其以下的數據往下移1行。

此時我們需要從下往上執行將本行的內容寫進下一行,然後清除本行內容的操作。如果一共有500個數據,一次操作需要10秒,那麼1個小時也完成不了這項工作。

總的來說,數據按獲取順序排列的話,雖然添加數據非常簡單,只需要把數據加在最後就可以了,但是在查詢時較為麻煩;以拼音順序來排列的話,雖然在查詢上較為簡單,但是添加數據時又會比較麻煩。

雖說這兩種方法各有各的優缺點,但具體選擇哪種還是要取決於這個電話簿的用法。如果電話簿做好之後就不再添加新號碼,那麼選擇後者更為合適;如果需要經常添加新號碼,但不怎麼需要再查詢,就應該選擇前者。

我們還可以考慮一種新的排列方法,將二者的優點結合起來。那就是分別使用不同的表存儲不同的拼音首字母,比如表L、表M、表N等,然後將同一張表中的數據按獲取順序進行排列。

表L

表M

表N

這樣一來,在添加新數據時,直接將數據加入到相應表中的末尾就可以了,而查詢數據時,也只需要到其對應的表中去查找即可。

因為各個表中存儲的數據依舊是沒有規律的,所以查詢時仍需從表頭開始找起,但比查詢整個電話簿來說還是要輕鬆多了。

數據結構方面的思路也和製作電話簿時的一樣。將數據存儲於記憶體時,根據使用目的選擇合適的數據結構,可以提高記憶體的利用率

到這裡,我相信你對數據結構有了一定的瞭解,下一篇我們將對數據結構中最常用的-鏈表進行講解。

參考

《我的第一本演算法書》


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 慕課網- LovelyChubby-Jetpack全組件實戰 開發短視頻應用App-348元 筆記 微雲:https://share.weiyun.com/81aa12bb98016e200add31fb8e191cdf百度網盤:鏈接:https://pan.baidu.com/s/1IiClTkQ ...
  • Kotlin Android項目可用的靜態檢查工具: Android官方的Lint, 第三方的ktlint和detekt. ...
  • SublimeText3 Emmet安裝問題網上已經很多帖子了,這個簡單,主要對win7 64位我本人遇到的Emmet好多快捷功能無法用(比如ul>li*4 Tab無法生成)問題做了整理!搜了好多文章最終找到問題所在! 希望能幫到大家,也給自己做個記錄! 軟體下載: 這篇文章提供的是Windows ...
  • 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 256M,其他語言512M 小易給你一個包含n個數字的數組。你可以對這個數組執行任意次以下交換操作: 對於數組中的兩個下標i,j(1<=i,j<=n),如果為奇數,就可以交換和。 現在允許你使用操作次數不限,小易希望你能求出在所有能通過 ...
  • 作為開發人員,我喜歡在編碼時聽音樂。管弦樂使我可以更加專註於自己的工作。有一天,我註意到我的手指隨著音樂節奏在鍵盤上跳舞。喜歡彈鋼琴。代碼中的每個單詞或符號都和諧地書寫。然後我想...聽起來如何...我每天編寫的代碼? 這個想法誕生了。 ⭐️ 繼續在soundcode.now.sh上 直播,放置您的 ...
  • 事件的移除 removeEventListener() 第二個參數需要指定要移除的事件句柄,不能是匿名函數,因為無法識別 想要移除成功,那麼三個參數必須跟addEventListener中的三個完全一致 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
  • 前言 基於 vuex 3.1.2 按如下流程進行分析: Vue.use(Vuex) Vue.use() 會執行插件的 install 方法,並把插件放入緩存數組中。 而 Vuex 的 install 方法很簡單,保證只執行一次,以及使用 applyMixin 初始化。 applyMixin 方法定義 ...
  • input文本框中設置提示信息,可以使用placeholder屬性,結果就是這樣,有當文本框內容為空時就顯示提示信息,當輸入內容時提示內容就消失了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...