《數據結構與算法》第一課:數據結構與算法基礎導論

前言:

bo主是某二本大學計算機類專業大三學生,時至大三,思來想去,大學三年彷彿學到了什麼,又彷彿什麼都沒有學到。於是痛下決心,開此博客。在讀學期間也看過許多大牛的博客,看得甚爲歎爲觀止!如今,也想嘗試一下將自己所學到的相關知識整理成冊,一則是爲了複習整理相關知識點,爲研究生考試做準備;二則是爲了加深知識點的理解透徹度,能夠將學到的知識用自己的話說出來。(由於考研複習等相關影響,更新時間不確定,不過一定不會斷更,且一星期至少一更…)

1.1 數據
1.2 數據結構
1.3 邏輯結構與存儲結構
1.4 抽象數據類型

——————————————————————————————————————
1.1 數據

在現實生活中,數據其實是無處不在的。比如,一張圖片是數據,一段視頻是數據,去菜市場買菜時,各種蔬菜的價格是數據;上學時,同班同學的名字是數據;晚飯後散步時,所偶遇到的漂亮女生的數量亦可以稱爲數據…

所以由上,我們總結出關於數據的定義:數據就是描述事物的符號,數據不僅包括數值類型,如上述提到的,價格和漂亮女生的數量。也包括非數值類型,如上述提到的,圖片、視頻等。不過在計算機科學與技術這門專業下,關於數據的定義還有個前提是要能夠被計算機識別和處理,這並不難理解,因爲此專業籠統的來說就是基於計算機解決相關問題。

關於數據的概述,我們還要知道數據元素與數據項的相關定義。
數據元素:是組成數據的基本單位。
數據項:是組成數據元素的最小單位。

quotation:在大學中,整個學生信息表就是一個數據,
其中組成這個表的每個學生的信息就是一個數據元素,
每個學生的姓名、性別、學號、班級等就是一個個數據項。

「注:數據項再拆開就沒意義了。比如學生的姓名,若拆成每個字,就沒有了意義。所以稱數據項是最小單位。但是我們在實際處理問題的時候,操作的還是數據元素而不是數據項,如同我們再談論一部小說的時候,我們談論更多的是情節的發展而不是單個字或者詞」

在這裏插入圖片描述
好了,我們已經對數據有了一定的瞭解,那麼那赫赫有名的數據結構又是指什麼呢?
——————————————————————————————————————
1.2 數據結構

結構,在現實生活中我們聽到這個詞大多是用於建築方面,如建築結構、建造結構等。其新華字典意義是組成整體的各部分的搭配和安排。shit!聽不懂,什麼是搭配,什麼是安排,bo主第一次看到這種解釋只想打電話給小學老師,並向她懺悔當初沒有好好學習閱讀理解。

言歸正傳,所謂結構,我們大可以理解其爲關係。即:結構=關係

所謂的數據結構,指的就是相互之間存有特定關係的數據元素的集合。

我們在定義中,提到的特定關係,那麼所謂的特定關係具體是指什麼呢?
——————————————————————————————————————
1.3 邏輯結構與物理結構

我們通常把數據結構分爲邏輯結構和物理結構。

所謂邏輯結構,是指數據元素之間的相互關係。
所謂物理結構,是指數據的邏輯結構在計算機中的存儲形式。
那麼,數據之間又存在哪些邏輯結構呢?

(1). 集合結構:集合結構中的數據元素除了同屬於一個集合外,它們之間沒有其他關係。如國家首都的集合,在集合中,中國的首都和美國的首都沒有任何關係,都是平等的元素。

(2). 線性結構:線性結構中的數據元素是一對一的關係。如排隊,把每個人看成一個元素,每個元素都有唯一後繼元素(除尾元素),每個元素都有唯一前傾元素(除首元素)。所以排隊中存在一對一的關係

(3). 樹形結構:樹形結構中的數據元素是一對多的層次關係。如老師要下達交作業的指令,她先通知每個組的小組長,再由每個小組長具體到他的小組組員。所以老師與小組長,及小組長與其小組組員之間存在一對多的關係。

(4). 圖形結構:圖形結構中的數據元素是多對多的關係。如多個城市之間的交通,你可以從多個城市出發到達重慶,也可以從重慶出發到達多個城市。所以城市與城市之間存在一種對多對的關係。
在這裏插入圖片描述

現在,我們已經瞭解了什麼是邏輯結構,接下來我們來講講什麼是物理結構?在此之前,我們先複習一下物理結構的定義。

物理結構:是指數據的邏輯結構在計算機中的存儲形式。

由定義,我們知道了,所謂的物理結構,即如何把數據存儲到計算機中。最關鍵的是,在存儲時要反映出數據元素之間的邏輯關係。數據元素的存儲形式有兩種:順序結構和鏈表結構。

所謂順序結構:是把數據元素存放在地址連續的存儲單元裏,其數據間的邏輯關係和物理關係是一致的

所謂鏈表結構:是把數據元素存放在任意存儲單元裏,這組存儲單元可以是連續的,也可以是不連續的。在具體實現中,要運用指針來實現。(後面bo主會用C語言具體實現)
——————————————————————————————————————
1.4 抽象數據類型

抽象數據類型(Abstract Data Type, ADT):是指一個數學模型(Data)及定義在該模型上的一組操作(Operation)。

這裏可以用面向對象(OOP)的概念來幫助理解。對象就是一種抽象數據類型,對象中屬性就是數學模型,在該數學模型上的操作,就是對象中的方法。若看官沒有學過面向對象編程,沒有關係,忽略我上面說的話。咱們接着用更爲簡單的例子來說明何爲抽象數據類型。

隨着科技的發展,每個家庭幾乎了都有自己的車。我們把車看做一種抽象數據類型,不管你是蘭博基尼還是別克君越、不管你是大哥奧迪還是小弟奧拓,它們都有通用的特性,就是必須有方向盤,有發動機,有輪胎,要實現的操作有前進、轉彎、剎車。

我們把方向盤、發動機、輪胎看做是一種數學模型,我們要用這些數學模型來實現前進、轉彎、剎車的操作。這就是一種抽象數據類型的實現。

「好,第一篇博客到此結束,希望各位大佬提出指導性意見,若有雷同,算我抄你的!」

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