數據結構數組
是相互之間存在一種或多種特定關係的數據元素的集合。數據結構
1.4.1 數據設計
是描述客觀事物的符號,**是計算機中能夠操做的對象,是能被計算機識別,並輸入給計算機處理的符號集合。**數據不只僅包括整型、實型等數值類型,還包括字符及聲音、圖像、視頻等非數值類型。指針
1.4.2 數據元素視頻
是組成數據的、有必定意義的基本單位,在計算機中一般做爲總體處理。也被稱爲記錄。(人的數據元素是人;禽類的數據元素是牛、馬、羊、雞、豬、狗等動物)對象
1.4.3 數據項圖片
一個數據元素能夠由若干個數據項組成。數據項是數據不可分割的最小單位。好比人這樣的數據元素,能夠有眼、耳、口,鼻、手、腳這些數據項,也能夠有姓名、年齡、性別、出生地址、聯繫電話等數據項,具體有哪些數據項,要視你作的系統來決定。內存
1.4.4 數據對象字符串
是性質相同的數據元素的集合,是數據的子集。什麼叫性質相同呢,是指數據元素具備相同數據和類型的數據項,好比,仍是剛纔的例子,人都有姓名、生日、性別等相同的數據項。數學
1.4.5 數據結構
** 結構,簡單的理解就是關係**,好比分子結構,就是說組成分子的原子之間的排列方式。嚴格點說,結構是指各個組合部分相互搭配和排列的方式。
在現實世界中,不一樣數據元素之間不是獨立的,而是存在特定的關係,咱們將這些關係稱爲結構。那數據結構是什麼?
數據結構:是相互之間存在一種或多種特定關係的數據元素的集合。
按照視點的不一樣,咱們把數據結構分爲邏輯結構和物理結構。
**邏輯結構:是指數據對象中數據元素之間的相互關係。**其實這也是咱們從此最須要關注的問題。邏輯結構分爲如下四種:
在用示意圖表示數據的邏輯結構時,要注意兩點:
物理結構(存儲結構):是指數據的邏輯結構在計算機中的存儲形式。分爲順序存儲和鏈式存儲。
數據的存儲結構應正確反映數據元素之間的邏輯關係,這纔是最爲關鍵的,如何存儲數據元素之間的邏輯關係,是實現物理結構的重點和難點。
順序存儲結構:是把數據元素存放在地址連續的存儲單元裏,其數據間的邏輯關係和物理關係是一致的。 這種存儲結構其實很簡單,說白了,就是排隊佔位。你們都按順序排好,每一個人佔一小段空間,你們誰也別插誰的隊。咱們以前學計算機語言時,數組就是這樣的順序存儲結構。當你告訴計算機,你要創建一個有9個整型數據的數組時,就三級就在內存中找了片空地,按照一個整型所佔位置的大小乘以9,開闢一段連續的空間,因而第一個數組數據就放在第一個位置,第二個數據放在第二個,這樣依次擺放。
若是就是這麼簡單和有規律,一切就好辦了。可實際上,總會有人插隊,也會有人要上廁所、有人會放棄排隊。因此這個隊伍當中會添加新成員,也有可能會去掉老元素,整個結構時刻都處於變化中。顯然,面對這樣時刻要變化的結果,順序存儲是不科學的。那怎麼辦呢?
如今如銀行、醫院等地方,設置了排隊系統,也就是每一個人去了,先領一個號,等着叫號,叫到時去辦理業務或看病。在等待的時候,你愛在哪在哪,能夠坐着,站着或者走動,甚至出去逛一圈,只要及時回來就行。你關注的是前一個號有沒有被叫到,叫到了,下一個就輪到你了。
鏈式存儲結構:是把數據元素存放在任意的存儲單元裏,這組存儲單元能夠是連續的,也能夠是不連續的。
顯然,鏈式存儲就靈活多了,數據存在哪裏不重要,只要有一個指針存放了相應的地址就能找到它了。
前幾年香港有部電影叫《無間道》,大陸還有部電視劇叫《潛伏》,都很火,不知道你們有沒有看過,大體說的是,某一方潛伏在敵人的內部,進行一些情報收集工做。爲了避免暴露每一個潛伏人員的真實身份,每每都是單線聯繫,只有上線知道下線是誰,而且是經過暗號來聯絡。正常狀況下,情報是能夠順利地上傳下達的,可是若是某個鏈條中結點的同志犧牲了,那就麻煩了,由於其餘人不知道上線或者下線是誰,後果就很嚴重。
好比在《無間道》中,梁朝偉是警方在黑社會中的臥底,一直是與黃秋生扮演的警官聯絡,可當黃遇害後,梁就沒法證實本身是一個警察了。因此影片的結尾,當梁朝偉用槍指着劉德華的頭說,"對不起,我是警察"。劉德華立刻反問:"誰知道呢"。是呀,當沒有人能夠證實你的身份的時候,誰知道你是誰呢?影片看到這裏,多少讓人有些唏噓感慨。這其實就是鏈式關係的一個現實樣例。
邏輯結構是面向問題的,而物理結構就是面向計算機的,其基本的目標就是將數據及其邏輯關係存儲到計算機的內存中。
數據類型:是指一組性質相同的值的集合及定義在此集合上的一些操做的總稱。
數據類型是按照值的不一樣進行劃分的。
當年那些設計計算機語言的人,爲何會考慮到數據類型呢?
好比,你們都須要住房子,也都但願房子越大越好。很顯然,沒有錢,考慮房子是沒啥意義的。因而商品房就出現了各類各樣的房型,有別墅,有錯層,有單間的;有一百多平米的,也有幾十平米的,甚至在北京還出現了膠囊公寓--只有兩平米的房間。。。。這樣就知足了不一樣人的須要。
一樣,在計算機中,內存也不是無限大的,你要計算一個如1+1=二、3+5=8這樣的整型數字的加減乘除運算,顯然不須要開闢很大的適合小數設置字符串運算的內存空間。因而計算機的研究者們就考慮,要對數據進行分類,分出來多種數據類型。
在C語言中,按照取值的不一樣,數據類型能夠分爲兩類:
好比,在C語言中變量聲明int a,b,這就意味着,在給變量a和b賦值時不能超出in她的取值範圍,變量a和b之間的運算只能是int類型所容許的運算。
抽象是指抽取出事物具備的廣泛性的本質。
抽象數據類型(Abstract Data Type,ADT):是指一個數學模型及定義在該模式上的一組操做。 抽象數據類型把實際生活中的問題分解爲多個規模小且容易處理的問題,而後創建一個計算機能處理的數據模型,並把每一個功能模塊的實現細節做爲一個獨立的單元,從而使具體實現過程隱藏起來。
數據結構的一些相關概念,如如1-7-1 所示。
數據結構,從不一樣的角度來探討,會有不一樣的分類,如圖1-7-2所示。 ]