數據結構導論之第一章(概論)

 1、引言

數據結構(Data structure):是計算機組織數據和存儲數據的方式,是指一組相互之間存在一種或多種特定關係的數據的組織方式和它們在計算機內的存儲方式,以及定義在該組數據上的一組操做。算法

數據結構:數據的邏輯結構+數據的存儲結構+數據的基本運算數據庫

計算機解決問題的步驟:編程

  • 一、創建數學模型
  • 二、設計求解算法
  • 三、編程實現算法(運用各類計算機語言實現算法)

1976年瑞士計算機科學家尼克勞斯·維爾特[Niklaus Wirth]提出:算法+數據結構=程序數據結構

2、基本概念和術語

數據(Data):全部能被計算機處理的符號的集合。實際問題中的數據稱爲原始數據
數據元素(Data Element):是數據這個集合中的一個個體即數據的基本單位。
數據項(Data Item):數據元素經常還可分爲若干個數據項,數據項是數據具備意義的最小單位;數據庫中,數據項又稱爲字段/域,它是數據的不可分割的最小標識單位。函數

一、數據的邏輯結構:數據的邏輯結構是指數據及數據的組織方式,是一種數學模型;指數據元素之間的結構關係設計

數據的邏輯結構(D, {R}) 可分爲下列幾種: D = {d1,d2, …, dn}指針

  • ◆ 集合: 數據元素同「屬於一個集合」。R = { }。任意兩個結點之間都沒有鄰接關係,組織形式鬆散
  • ◆ 線性結構: R= {(d1, d2), (d2, d3), …, (dn-1, dn)},即除起始節點和終端結點d一、dn外,每一個節點有一個前驅和一個後繼;結點按邏輯關係依次排列造成一條「鏈」,結點之間一個一個依次相鄰接。
  • ◆ 樹形結構: (D, {R}) 構成樹,即每一個元素最多有一個前驅,能夠有多個後繼;具備分支、層次特性,上層的結點能夠和下層多個結點相鄰接,但下層結點只能和上層的一個結點相鄰接
  • ◆ 圖結構: (D, {R})構成一個圖;最複雜,任何兩個結點均可以相鄰接。

二、數據的存儲結構(物理結構):數據的存儲結構是指數據的邏輯結構在計算機中的表示,數據的存儲結構分爲順序存儲結構和連接存儲結構兩種。對象

存儲結構的主要部分:blog

  • 存儲結點:每一個存儲結點存放一個數據元素
  • 元素邏輯關係:數據元素之間關聯方式的表示

數據結構的存儲=數據元素的存儲+元素邏輯關係的存儲索引

元素關聯關係的存儲方式主要有:

  • 順序存儲方式:指全部存儲節點存放在一個連續的存儲區裏,利用節點在存儲器中的相對位置來表示元素之間的邏輯關係
  • 鏈式存儲方式:指每一個存儲點除了包含一個數據元素外,還包含指針,每一個指針指向一個與本節點有邏輯關係的節點,用指針表示數據元素之間的邏輯關係
  • 索引存儲方式
  • 散列存儲方式

=============順序存儲方式=================

順序存儲方式:藉助數據元素的相對存儲位置來表示數據的邏輯結構;
線性表的順序存儲方法:將表中的結點一次存放在計算機內存中一組連續的存儲單元中。
順序的方法: 將元素存儲到一片連續的存儲區
特色:

  • 一、 預先分配好長度,須要預估存儲數據須要的存儲量;
  • 二、插入和刪除須要移動其餘元素;
  • 三、存取快捷,是隨機存取結構。

=============鏈式存儲方式=================

鏈式存儲方式:藉助數據元素地址的指針表示數據的邏輯結構;這種結構是給結點附加一個指針字段,指出其後繼節點的位置,即存放結點的存儲單元分爲兩部分:數據項和指針項

特色:

  •  動態分配,不須要預先肯定內存分配;
  •  插入和刪除不須要移動其餘元素;
  •  非隨機存取結構

===========索引存儲方式===============

索引存儲方式:藉助索引表中的索引指示各存儲節點的存儲位置。

===========散列存儲方式===============
散列存儲方式:用散列函數指示各節點的存儲位置。

三、運算

運算:指在某種邏輯結構上施加的操做,即對邏輯結構的加工。
加工型運算:其操做改變原邏輯結構的值;如:結點個數,結點內容等。
引用型運算:其操做不改變原邏輯結構的值。

基本運算:創建(建立)、查找 、讀取 、插入 、刪除

3、算法及描述

算法:算法規定了求解給定類型問題所需的全部「處理步驟」及執行順序,使給定類型問題能在有限時間內被機械的求解。

算法必須使用某種語言描述:

  • 程序
  • 介於天然語言和程序設計語言的僞代碼
  • 非形式算法(天然語言)
  • 框圖(N-S圖)

一個算法是對特定問題求解步驟的一種描述,它是指令的有窮序列。
算法具備如下特性:

  • ① 有窮性: 一個算法老是在執行有窮步後結束。
  • ② 肯定性: 算法的每一步都必須是明確地定義的。
  • ③ 可行性: 算法中的每一步都是能夠經過已經實現的操做來完成的。
  • ④ 輸入: 一個算法有零個或者多個輸入,這些輸入取自於特定的對象集合。
  • ⑤ 輸出:一個算法有一個或者多個輸出,它們是與輸入有特定關係的量。

4、算法分析

算法的設計應知足:

  • ① 正確性:對於合法的輸入產生符合要求的輸出。
  • ② 易讀性:算法應該易讀、便於交流, 這也是保證算法正確性的前提;添加註釋也是一種增長可讀性的辦法。
  • ③ 健壯性:當輸入非法數據時, 算法還能作出適當的反應而不會崩潰,如輸出錯誤信息;算法中應該考慮適當的錯誤處理。
  • ④ 時空性:指算法的時間複雜度和空間複雜度,算法分析主要分析算法的時間複雜度和空間複雜度,目的是提升算法的效率。

最優算法的2個度量:

  • 時間複雜度:算法運行時須要的總步數,一般是問題規模的函數。
  • 空間複雜度:算法執行時所佔用的存儲空間,一般是問題規模的函數

肯定算法的計算量:

  • 合理地選擇一種或幾種操做做爲「標準操做」,無特殊說明,默認以賦值語句做爲標準操做;肯定每一個算法共執行多少次標準操做,並將這次數規定爲該算法的計算量。
  • 算法的最壞狀況時間複雜度:以算法在全部輸入下的計算量的最大值做爲算法的計算量。
  • 算法的平均狀況時間複雜度:以算法在全部輸入下的計算量的加權平均值做爲算法的計算量。
  • 最壞狀況時間複雜度和平均狀況時間複雜度統稱爲時間複雜度

================時間複雜度================

 運行該代碼須要1秒 ,時間複雜度記做O(1)

 運行該代碼須要n*1秒 時間複雜度記做O(n)

 運行該代碼須要n*n*1秒 時間複雜度記做O(n*n);

 ================空間複雜度===============

空間複雜度:是對一個算法在運行過程當中臨時佔用存儲空間大小的量度;估算算法空間複雜度時,通常只分析輔助變量所佔用的空間。
一個算法在執行期間所須要的存儲空間量包括如下部分:

  •  程序代碼所佔用的空間;
  •  輸入數據所佔用的空間;
  •  輔助變量所佔用的空間;
相關文章
相關標籤/搜索