數據結構與算法系列

       自己總結的最適合自己

 

爲什麼學習數據結構? 

        同樣的問題,有的人寫出來的程序效率高,有的人卻用很複雜的方法解決。學習數據結構能用最有效的方法解決絕大多數的問題。

        學習數據結構的目的有三個。第一個是學習常用的數據結構,這些數據結構形成了我們程序員基本數據結構工具箱(toolkit)。對於許多常見的問題,工具箱裏的數據結構是理想的選擇。就像.NET Framework 中 Windows 應用程序開發中的工具箱,程序員可以直接拿來或經過少許的修改就可以使用,非常方便。第二個是學習常用的算法,這和數據結構一樣,是人們在長期實踐過程中的總結,程序員可以直接拿來或經過少許的修改就可以使用。可以通過算法訓練來提高自身程序設計水平。第三個目的是通過程序設計的技能訓練促進程序員綜合能力的提高。

        簡而言之,數據結構是程序員的內功修煉的一部分。

基本概念和術語

  

1、 數據(Data)

        計算機程序處理各種各樣的數據,可以是數值數據,如整數、實數或複數;也可以是非數值數據,如字符、文字、圖形、圖像、聲音等。

2、 數據元素(Data Element)和數據項(Data Item)

      數據元素是數據的基本單位,在計算機程序中通常被作爲一個整體進行考慮和處理。一個數據元素可由若干個數據項(Data Item)組成。數據項是不可分割的、含有獨立意義的最小數據單位,數據項有時也稱爲字段(Field)或域(Domain)。例如,一條學生記錄就是一個數據元素。這條記錄中的學生學號、姓名、性別、籍貫、出生年月、成績等字段就是數據項。數據項分爲兩種,一種叫做初等項,如學生的性別、籍貫等,在處理時不能再進行分割;另一種叫做組合項,如學生的成績,它可以再分爲數學、物理、化學等更小的項。

3、 數據對象(Data Object)

        數據對象是性質相同的數據元素的集合, 是數據的一個子集。例如,整數數據對象是{0,±1,±2,±3,…},字符數據對象是{a,b,c,…}。

4、 數據類型(Data Type)

        數據類型是高級程序設計語言中的概念,是數據的取值範圍和對數據進行操作的總和。數據類型規定了程序中對象的特性。程序中的每個變量、常量或表達式的結果都應該屬於某種確定的數據類型。例如,C#語言中的字符串類型( String,經常寫爲 string)。一個 String 表示一個恆定不變的字符序列集合,所有的字符序列集合構成 String 的取值範圍。我們可以對 String 進行求長度、複製、連接兩個字符串等操作。

數據結構分類

        一、數據的邏輯結構

        數據結構是相互之間存在一種或多種特定關係的數據元素的集合。在任何問題中,數據元素之間都不是孤立的,而是存在着一定的關係,這種關係稱爲結構(Structure)。根據數據元素之間關係的不同特性,通常有 4 類基本數據結構:

        (1) 集合(Set):該結構中的數據元素除了存在“同屬於一個集合”的關係外,不存在任何其它關係。

        (2) 線性結構(Linear Structure):該結構中的數據元素存在着一對一的關係。

         順序存儲結構 鏈式存儲結構 索引存儲方法  散列存儲方法

        (3) 樹形結構(Tree Structure):該結構中的數據元素存在着一對多的關係。

        (4) 圖狀結構(Graphic Structure):該結構中的數據元素存在着多對多的

      二、數據的物理結構

     指數據的邏輯結構在計算機存儲空間的存放形式

常用數據結構

數組  棧  隊列  鏈表   樹  圖  堆  散列表

什麼是算法

        算法可以理解爲有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題

一個算法應具備的五項特徵

         有窮性  確切性  輸入項:0或多個   輸出項:1或多個    可行性 

算法與數據結構的關係

       數據結構可以認爲是數據在程序中的存儲結構,和基本數據操作。算法可以是認爲解決問題的,算法是基於數據結構的。數據結構是問題的核心,是算法的基礎

算法的評價標準

運行時間(Running Time)。

佔用空間(Storage Space)。

        有時需要犧牲空間來換取時間,有時需要犧牲時間來換取空間。其他方面:正確性(Correctness)、可讀性(Readability)、健壯性(Robustness)

常用算法

        遞推法  遞歸法  窮舉法(暴力破解法)  貪心算法   分治法    動態規劃法   迭代法   分支界限法  回溯法

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