1. 程式人生 > >資料結構與演算法--基礎入門概念

資料結構與演算法--基礎入門概念

資料結構與演算法--基礎入門概念

一: 資料結構

1:資料的層次劃分

1:資料型別

一個類(相當於Java中的class)

2:資料元素

資料元素屬於一種資料型別

3:資料物件

資料型別的例項物件

4:資料項

資料型別的屬性,資料型別的例項物件的屬性,也是一種資料元素

5:借圖輔助理解

Alt
Alt

2:基於資料的資料結構

1: 物理層的儲存結構

  1. 對於計算機,只能識別,儲存,計算二進位制的"資料";應用層資料資料和程式指令,對其來說沒有區別;
  2. 物理層面來說,大致上有 順序儲存鏈式儲存 兩種;與之對應的是"陣列","連結串列"概念;當然,陣列需要連續的空間,但是訪問效能高,空間利用率低;連結串列可以使用零碎的記憶體空間,空間利用率高,訪問效能總體不如陣列;

2:應用層的邏輯關係結構

資料結構的應用層的邏輯關係結構,從應用層來說 ,基本都是基於"陣列"和"連結串列"兩種基本型別資料結構而衍生的;但是存在一種邏輯上的"集合結構

"較為特殊,可參考後續詳解;
如:

線性結構

可以當成"陣列"理解

樹形結構

可以當成"連結串列"理解

圖形結構

可以當成複雜的"連結串列"理解

集合結構(相對特殊)

集合結構可以理解成資料元素中的***資料子元素***之間沒有顯示的邏輯關係,一般相互訪問時,需要通過父級層面去訪問;

如何評價一個數據結構的優劣?

資料結構的優劣的評價必須配合演算法一起應用,才能說其優與劣;

二:演算法

演算法是依賴資料結構的,以及其實際中的特性,才能最大程度利用各種資源,達到最好的效果;

演算法的兩大指標

實際情況是,根據具體的場景,需要組合使用兩大指標,而採取某種策略;是時間換空間還是空間換時間等;

時間複雜度,隨著資料量的增加,所耗費的時間;

  • 線型(不好)
  • 指數型(最差)
  • 對數型(較好)

空間複雜度,隨著資料量的增加,所消耗的空間;

  • 線型(不好)
  • 指數型(最差)
  • 對數型(較好)

三:常見的基礎的演算法與資料結構

複雜的演算法和資料結構,通常都是由基本的資料結構和演算法組成;

排序(演算法)

冒泡,快排,希爾排序,堆排等;

陣列(資料結構)

連結串列(資料結構)

單鏈表,雙向連結串列

樹與二叉樹(資料結構)

樹的預設規則: 父級"值"大於子級"值’,右節點"值"大於左節點"值";
AVL樹,紅黑樹等,都是在 的基礎上對其結構做進一步的限制;在插入/刪除查詢 效能之間做不同程度的平衡;

佇列(資料結構)

先進後出

棧(資料結構)

先進先出