第一章 數據結構與算法-前言

現在很多面試官都喜歡拿數據結構和算法針對面試者進行提問,當然如果你懂數據結構和算法肯定是更加分的,因爲現實中的大項目或者一些併發量大的項目,你說你不懂數據結構和算法,那肯定是不行的,所以如果我們不懂數據結構和算法,現在有需要來學習學習,增強自己的內功,在數據結構和算法這塊,在此,我們一起學習一起成長。

1、爲什麼要學習數據結構和算法?

  • 數據結構和算法有利於你生產高性能的代碼
  • 數據結構和算法有利於你排查生產內存溢出在問題
  • 數據結構和算法是你從事多年開發的技術沉澱
  • 數據結構和算法有利於你面試拿到更高薪水

當我們進行軟件設計時,首先要考慮的首要問題就是數據的表示、組織和處理方法,因爲這直接關係到軟件的工程化程序和軟件的運行效率,數據結構和算法是軟件系統設計的基礎和核心

在計算機界流傳的經典名言**“數據結構+算法=程序設計”**

2、什麼是數據結構

**數據(Data)是描述客觀事物的數字、字符以及所有能輸入到計算機中並能被計算機接受的各種符號(例如圖形、圖像、音頻、視頻等多媒體數據)**的集合的統稱。

數據結構指數據元素之間存在的關係。一個數據結構(Data Structure) 是由n(n>=0)個數據元素組成的有限集合,數據元素之間具有某種特定的關係。

數據結構的概念包含三個方面數據的邏輯結構數據的存儲結構對數據的操作

2.1 數據的邏輯結構

數據的邏輯結構是指元素之間的邏輯關係,用一個數據元素的集合和定義在此集合上的若干關係來表示,常被簡稱爲數據結構

根據不同數據特性,數據結構分爲三種:線性結構、樹結構和圖。其中結和圖是非線性結構。

2.1.1 線性結構

image.png

線性結構是數據元素之間具有線性關係的數據結構。線性表(a1,a2,…an)是由n>=0個類型相同的數據元素組成的有限序列,若n=0,則爲空表,而且除了第一個元素和最後一個元素,中間的元素都有前驅元素後驅元素,整個數據結構中採用序號(Index)來確定元素在線性結構中的邏輯次數。其實像我們的Java的數組就是這種線性數據結構。

2.1.2 樹結構

image.png

樹結構是數據元素之間具有層次關係的一種非線性結構,樹中數據元素通常稱爲結點。樹結構的層次關係是指,根(最頂層)結點沒有前驅節點(又稱父節點),除根之外的其他節點有且僅有一個父結點,所有節點可以有零到多個子節點

2.1.3圖

image.png
圖也是非線性結構,每個數據元素可有多個前驅元素和多個後驅元素。例如交通道路圖、飛機航班圖,邊上的數值有特殊意義。如上圖每個節點表示一個國家,A點飛到B點需要19個小時。

2.2 數據的存儲結構

數據元素及其關係在計算機中存儲表示或實現稱爲數據的存儲結構,也稱爲物理結構
數據存儲結構的基本形式有2種:順序存儲結構和鏈式存儲結構

2.2.1 順序存儲結構

順序存儲結構使用一組***連續的內存單元依次存放數據元素***,數組元素在內在中的物理存儲次序與它們的邏輯次序相同,即每個元素a(i)與a(i-1)或者a(i+1)的存儲位置相臨,我們Java中的數組就是順序存儲結構。
image.png

2.2.2鏈式存儲結構

鏈式存儲結構使用***若干地址分散***的存儲單元數據元素,邏輯上相鄰的數據元素在物理位置上不一定相鄰,數據元素間的關係需要採用附加信息特別指定。通常,採用指針變量記載前驅或後驅元素的存儲地址,由數據域和地址域組成一個節點表示一個數據元素,通過地址域將相互直接關聯的結構鏈接起來,結點間的鏈接關係體現數據元素間的邏輯關係。
image.png

2.3 對數據的操作

每種數據結構都需要一組對其數據元素實現特定功能的操作,包含以下一些基本操作:
①初始化
②判斷是否空狀態
③存取
④統計元素個數
⑤遍歷
⑥插入
⑦查找
⑧排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章