數據結構從0.2到1(一)

數據結構從0.2到1

爲何要選擇這樣的一個標題呢,固然,主要是要寫一系列關於學習數據結構的文章。可是,爲何是從0.2呢?由於做爲一名計算機專業畢業的學生來講,實在很差意思說本身從0到1,我真的是怕老師看到後會打過來。。。關於數據結構,多是由於大學時沒有學好,反正已經忘了十之八九,這個系列算是複習,鞏固,提升。因爲大學時的教材已經...因此最近想要再學習數據結構的時候,就選擇了《大話數據結構》這本書。程序員

if you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifttime.算法

這是這本書的開場白,至於我爲何也選擇它做爲開場白呢?其一,我尚未到能夠教人寫程序的高度,可是仍是但願這一系列文章能夠對你有借鑑意義,大牛能夠略過,固然,也但願各位大牛能夠指導小弟,不吝賜教,其二,同時也是最重要的,以爲這句話很nb有木有,裝b利器有木有,整我的的逼格都已經獲得了昇華有木有。
是時候展示真正的技術了,以上皆是廢話,對不起,耽誤了您那寶貴的幾秒鐘,寶寶心理仍是滿滿的愧疚感呢。。。數據結構

爲何要學數據結構

由於我是程序員。。。僅此而已。性能

程序設計的實質是對肯定的問題選擇一種好的結構,加上設計一種好的算法。學習

敲代碼這件事得難易程度可能很大一部分是由本身決定的,能夠像板磚,從這邊搬到那邊。固然也能夠拒絕,寫出運行效率更高並且更漂亮的的代碼,可是這不是件容易的事,它真的是須要一些關於數據結構的基礎。spa

基本概念

在學習數據結構的過程當中,咱們可能會遇到不少的專業術語,並且這些術語真的很容易相互混攪,因此這裏先作一個總結,盡我所能儘可能解釋清楚。設計

數據(Data)

數據是描述客觀事物的富豪,是計算機中能夠操做的對象,是能被計算機識別,並輸入給計算機處理的符號集合。指針

太抽象了,徹底不知道是什麼鬼!
這裏有一個很重要的特徵「能夠輸入到計算中」。能夠被輸入的,必然是能夠被處理的,好比一塊石頭坑定輸入不進去更別說被處理,可是若是以一個視頻的話,確定是能夠被存儲的存儲器裏而且能夠被處理的,包括,解碼,壓縮,格式轉換等等。視頻

數據元素(Data Element)

是組成數據的、有必定意義的基本單位,在計算機中一般做爲總體處理。對象

好比咱們說樹林確定就是由一顆顆樹組成的,而這一顆樹就能夠被稱爲數據元素。
好比有一個表,存儲了不少本書,那麼這其中一條關於書的記錄就是一個數據元素。

數據項 (Data Item)

數據項是數據的不可分割的最小單位。好比,包括書名、做者名、分類號、出版單位及出版時間在內的一條書目信息在計算機圖書管理程序中被做爲一個數據元素來看待。而書名、分類號等被稱做數據項。

數據對象 (Data Object)

數據對象是性質相同的數據元素的集合,即具備相同數量和類型的數據項。是數據的一個子集。
例如,整數數據對象的集合可表示爲N={0,±1,±2…….},字母字符數據對象的集合可表示爲C={‘A’,’B’,…’Z’}。

數據結構(Data Structure)

數據結構是相互之間存在一種或多種特定關係的數據元素的集合。在現實世界中不一樣的數據元素之間並非相互獨立的而是存在某種特定關係的,咱們將這種關係稱爲結構。

邏輯結構和物理結構。

按照視角的不一樣,數據結構能夠分爲邏輯結構和物理結構。

邏輯結構

邏輯結構是咱們主要須要關注的,是用來描述數據元素之間的特定關係的。咱們根據數據元素之間關係的不一樣特性,將數據結構劃分爲四種類型。

集合

在集合結構中,數據元素之間除了「同屬於一個集合」的關係外,別無其它關係。以下圖所示的幾個小圓,它們之間並不存在特殊關係,除了被包含在同一個大圓內之外。

clipboard.png

線性結構

線性結構中的數據元素之間存在一對一的關係,即相鄰數據元素之間具備「前驅」和「後繼」的關係,線性表是一個典型的線性結構。棧、隊列、串等都是線性結構。

clipboard.png

樹形結構

樹形結構中的數據元素存在一種一對多的層次關係

clipboard.png

圖形結構

圖形結構中數據元素間存在多對多的關係。因爲「集合」是數據元素之間關係極爲鬆散的一種結構,所以也能夠用其它結構來表示它。
clipboard.png

物理結構

物理結構是指數據的邏輯結構在計算機中的存儲形式,數據的存儲結構應該正確反應數據元素之間的邏輯關係。數據元素的存儲結構有兩種形式:順序存儲和鏈式存儲。

順序存儲結構

順序存儲把一系列數據元素存放在一組連續的存儲單元內,其數據間的邏輯關係和物理關係應該是一致的。以下圖:

clipboard.png

順序表存儲密度較大,節省空間;但須要事先肯定容量,在時間性能方面,讀運算較快,但在插入和刪除元素的時候可能會移動大量的元素所以可能會

鏈式存儲結構

鏈式存儲結構把數據元素存放在任意的存儲單元內,這組存儲單元不必定要連續,此時其存儲關係並不能在反映其邏輯關係。在這種狀況下,咱們就須要指針來找到相關的元素。今天就到這裏了,之後會持續更新。

相關文章
相關標籤/搜索