【數據結構複習】(1)緒論

前言

  由於自己已經大四,開始決定寫這個博客,記錄下自己每一天一點一滴的進步,希望自己的收穫能與大家一同分享。數據結構這門課是我在大二上學期所學的,由於之前學習C語言的時候已經接觸了常用的一些數據結構,加之自己以前也看過不少數據結構方面的書,因此學習起來比較輕鬆。馬上要參加2012年的研究生入學考試,數據結構作爲專業課的一門,就要重新開始複習了。因此通過記錄這個博客,來每天更新自己的複習成果。這是一個系列,希望自己能夠堅持下去。所用的教材是清華大學出版的《數據結構(C語言版)》。

 

基本概念

  數據(data):客觀事物的符號表示。【CS】指所有能輸入到計算機中並被計算機程序處理的符號的總稱。【注】一般來說,現實中的數據輸入到計算機後,都會被轉化爲計算機的數據表示。

  數據元素(data element):數據的基本單位,在計算機程序中通常作爲一個整體進行考慮和處理。【注】比如C語言中的結構體,C++中的類等等。

  數據項(data item):數據元素的組成單位。【注】比如結構體中的成員等等。

  數據對象(data object):性質相同的數據元素的集合,是數據的一個子集。【注】比如,在C語言中,一個數組的元素的全體就是一個數據對象。按照概念來講,這個數組並不屬於數據對象,因爲它只是存儲數據對象一種數據結構的組織形式(下面會講到數據結構的概念)。

  數據結構(data structure):相互之間存在一種或多種特定關係的數據元素的集合。存在以下四種基本結構(structure):(1)集合;(2)線性結構;(3)樹形結構;(4)圖狀結構或網狀結構。結構有邏輯結構和物理結構之分。邏輯結構是抽象角度來講數據之間的關係,而物理結構又稱爲存儲結構,是指數據結構在計算機中的實際表示。存在邏輯相關的數據不一定存在物理相關,十分明顯的一個例子是鏈表。

  數據類型(data type):一個值的集合和定義在這個值即上的一組操作的總稱。【注】看到它是不是很容易想起來類(class)的定義?

算法和算法分析

  算法(algorithm):對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。它具有以下5個重要特性:

    (1)有窮性。【注】必須能夠結束。

    (2)確定性。【注】相同輸入必須得到相同輸出。

    (3)可行性。【注】算法操作必須通過已經實現的基本運算執行有限次來實現。

    (4)輸入。【注】可以沒有輸入。

    (5)輸出。【注】必須有輸出。

  算法設計應該考慮的目標有:

    (1)正確性。

    (2)可讀性。

    (3)健壯性。

    (4)效率與低存儲量需求。【注】也許大家現在不注意存儲量,對內存隨意分配,有時候甚至對內存只申請而沒有釋放,這都是一種不好的習慣。

  在此小節中,比較重要的一個概念就是時間複雜度與空間複雜度,他們是衡量算法效率高低的重要指標。具體的不再介紹,如果對它們不瞭解,可以再次閱讀課本上相關內容。需要提一點的是,在通常的計算機科學中,時間資源與空間資源往往“魚與熊掌不可得兼”,所以當追求時間效率時,往往會犧牲大量的空間資源,但對於當前情況來說是可取的,因爲硬件大大豐富的今天,人們不必爲沒有空間而感到捉襟見肘。當然,也可以通過犧牲時間來降低空間複雜度,但大多數情況下,這樣的事情不會發生。畢竟時間的重要性要大於空間的重要性。

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