數(shù)據(jù)結(jié)構(gòu)的定義(下):結(jié)構(gòu)是什么

接上一節(jié)我們講到什么是數(shù)據(jù)裹驰,不記得同學(xué),可看看上一節(jié)的內(nèi)容片挂。我們今天來講數(shù)據(jù)結(jié)構(gòu)中的結(jié)構(gòu)的定義幻林。

image

結(jié)構(gòu)?怎一看音念,有建筑結(jié)構(gòu)沪饺,有書本目錄結(jié)構(gòu)等等,建筑結(jié)構(gòu)表示建筑物內(nèi)在物的各個(gè)組成部分的關(guān)系闷愤,目錄目錄結(jié)構(gòu)表示書中每一章節(jié)的順序整葡,那么數(shù)據(jù)結(jié)構(gòu)中的結(jié)構(gòu)有表示什么吶?

我們來看看官方定義:相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合讥脐。顧名思義遭居,數(shù)據(jù)相互之間的集合,當(dāng)然肯定是兩個(gè)或兩個(gè)以上數(shù)據(jù)的關(guān)系旬渠,就一個(gè)數(shù)據(jù)俱萍,那來的關(guān)系,在計(jì)算機(jī)中告丢,每個(gè)數(shù)據(jù)元素都是有意義的枪蘑,不存在孤立的,雜亂無序的數(shù)據(jù)元素,每個(gè)數(shù)據(jù)之間都是有一定的內(nèi)在聯(lián)系岳颇。

每了編寫出優(yōu)秀的程序照捡,我們必須處理好數(shù)據(jù)元素的特性及要處理對(duì)象之間的關(guān)系,這也是研究數(shù)據(jù)結(jié)構(gòu)的真正意義所在话侧。那么這些特定關(guān)系中都有哪些關(guān)系吶麻敌?

image

一、邏輯結(jié)構(gòu)與物理結(jié)構(gòu)

按照常規(guī)分類掂摔,我們把數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)和物理結(jié)構(gòu)术羔,這個(gè)跟我們把事物分抽象跟具體一樣。

結(jié)構(gòu)是非常重要的乙漓,它既能節(jié)省空間又能提高計(jì)算機(jī)的運(yùn)算速度级历,舉個(gè)例子:假如給大家提供一個(gè)箱子用來裝衣服,男同學(xué)不事先疊好衣服叭披,直接把衣服丟進(jìn)去寥殖,女同學(xué)先把衣服按大小,樣式涩蜘,相同款式的衣服疊起來嚼贡,然后按照事先考慮好的擺放順序裝進(jìn)箱子里,最后我看看同诫,同樣的空間粤策,女同學(xué)裝衣服的數(shù)量遠(yuǎn)遠(yuǎn)大于男同學(xué),這也是一個(gè)結(jié)構(gòu)的思維误窖。

1.1叮盘、邏輯結(jié)構(gòu)

定義:邏輯結(jié)構(gòu)是指數(shù)據(jù)對(duì)象中數(shù)據(jù)元素之間的相互關(guān)系。霹俺,這個(gè)跟我們高中學(xué)習(xí)的集合等數(shù)學(xué)學(xué)到知識(shí)類柔吼,我們把邏輯結(jié)構(gòu)分為四種:集合結(jié)構(gòu)、線性結(jié)構(gòu)丙唧、樹形結(jié)構(gòu)愈魏、圖形結(jié)構(gòu)。

(1) 集合結(jié)構(gòu)

試想一下我們以前用到過的火柴(可能現(xiàn)在的90后或00后很少見過火柴想际,都是用打火機(jī)比較多)培漏,這些火柴看起來都一樣的,沒有任何區(qū)分沼琉,它們沒有任何關(guān)系北苟,每一根都是平等的。

image

這就是我們現(xiàn)在說的集合:集合結(jié)構(gòu)中的數(shù)據(jù)元素除了同屬于一個(gè)集合外打瘪,它們之間沒有其他關(guān)系友鼻。每一個(gè)數(shù)據(jù)都是“平等”的傻昙,它們的共同屬性是“同屬于一個(gè)集合”。這個(gè)跟數(shù)學(xué)中的集合類似彩扔。如下圖(圓內(nèi)的每個(gè)數(shù)字都是無序平等的分布在圓內(nèi)):

image
(2) 線性結(jié)構(gòu)

線性結(jié)構(gòu)在我們生活中經(jīng)常遇到妆档,比如我們?cè)谂抨?duì),它就是一種線性的結(jié)構(gòu)

image

線性結(jié)構(gòu)中的數(shù)據(jù)元素之間是一對(duì)一的關(guān)系虫碉。一前一后就是排隊(duì)的關(guān)系贾惦。

(3) 樹形結(jié)構(gòu)

樹形結(jié)構(gòu)在我們生活中也比較常見,比如公司的組織關(guān)系敦捧,學(xué)校的組織關(guān)系须板。

image

上圖中部門或員工之間存在一對(duì)或一對(duì)多的層次關(guān)系,層次關(guān)系是樹形結(jié)構(gòu)的一種較為重要的概念兢卵,其次是一對(duì)多习瑰,到處我們引出了數(shù)據(jù)結(jié)構(gòu)中的樹形結(jié)構(gòu)的概念:樹形結(jié)構(gòu)中的數(shù)據(jù)元素之間存在一種一對(duì)多的層次關(guān)系

image
(4) 圖形結(jié)構(gòu)

在開始介紹圖形結(jié)構(gòu)前,我們來看看鄧超跟孫儷的電影關(guān)系圖

image

從圖中我們可以看到鄧超跟孫儷兩人是夫妻關(guān)系秽荤,他們一起演過電影甜奄,又有各自主演的電影。

這種關(guān)系就是一個(gè)比較典型的圖形結(jié)構(gòu)窃款,圖形結(jié)構(gòu)在圖譜中比較流行使用课兄,它是一種多對(duì)多的關(guān)系,它的定義是:圖形結(jié)構(gòu)的數(shù)據(jù)元素是多對(duì)多的關(guān)系

在畫數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)時(shí)晨继,需要注意兩點(diǎn):

  • 每個(gè)數(shù)據(jù)元素都是一個(gè)獨(dú)立節(jié)點(diǎn)烟阐,用圓圈表示

  • 元素與元素之間的邏輯關(guān)系用連線表示,如果有方向踱稍,可以使用箭頭表示曲饱、

1.2、物理結(jié)構(gòu)

上面介紹了邏輯結(jié)構(gòu)珠月,現(xiàn)在我們來物理結(jié)構(gòu)的定義(有些資料也稱為存儲(chǔ)結(jié)構(gòu),都是一回事楔敌,大家不要太在意)啤挎。物理結(jié)構(gòu):是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的存儲(chǔ)形式

在計(jì)算機(jī)中,以何種方式把數(shù)據(jù)存儲(chǔ)到計(jì)算機(jī)中的存儲(chǔ)器卵凑,這就涉及到物理幾個(gè)庆聘,存儲(chǔ)器我們可以很好理解,比如硬盤勺卢,軟盤伙判,光盤,U盤等外部存儲(chǔ)器黑忱,這些通常用戶文件結(jié)構(gòu)來描述存儲(chǔ)結(jié)構(gòu)宴抚。

數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)正確反映了數(shù)據(jù)元素之間的邏輯關(guān)系勒魔,這才是最為關(guān)鍵的,

數(shù)據(jù)元素的存儲(chǔ)結(jié)構(gòu)主要分為兩種形式:順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)菇曲。

(1) 順序式存儲(chǔ)結(jié)構(gòu)

順序式存儲(chǔ)結(jié)構(gòu)比較好理解一些:數(shù)據(jù)元素放在地址連續(xù)的存儲(chǔ)單元里冠绢,數(shù)據(jù)的邏輯關(guān)系和物理關(guān)系是一樣的。就跟圍棋盤子一樣常潮。

image

這種結(jié)構(gòu)相對(duì)來說比較簡(jiǎn)單弟胀,就是排隊(duì)占位,都按照固定的順序排好喊式,每個(gè)人占一個(gè)空間孵户,不插隊(duì)。

(2) 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

順序式存儲(chǔ)結(jié)構(gòu)要求數(shù)據(jù)元素按順序排序岔留,不插隊(duì)延届,不離隊(duì),一個(gè)處理完贸诚,直接到下一個(gè)方庭,但實(shí)際排隊(duì)的時(shí)候,總有人不按規(guī)矩來酱固,排隊(duì)離隊(duì)的情況總會(huì)存在械念。這情況也在計(jì)算機(jī)中存在,有些數(shù)據(jù)需要?jiǎng)h除也有需要插入的數(shù)據(jù)运悲,這種情況順序式存儲(chǔ)結(jié)構(gòu)是無法滿足這個(gè)需求的龄减,這時(shí)就引入了鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。

鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)定義:鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)把數(shù)據(jù)元素存放在任意的存儲(chǔ)單元里班眯,這組存儲(chǔ)單元可以是連續(xù)的希停,也可以是不連續(xù)的。我們來看看下圖署隘。

image

在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中宠能,數(shù)據(jù)元素的存儲(chǔ)關(guān)系并不能反映其邏輯關(guān)系,這時(shí)候需要一個(gè)指針(規(guī)定起點(diǎn)跟終點(diǎn))磁餐,數(shù)據(jù)元素只關(guān)心與我相關(guān)的元素就可以违崇,比如前面跟后面(后面的都不需要太關(guān)心),這樣通過指針指定的地址就可以找到相關(guān)聯(lián)數(shù)據(jù)元素的位置诊霹。

這樣看來羞延,鏈?zhǔn)酱鎯?chǔ)比順序式存儲(chǔ)靈活很多,同樣的空間脾还,順序存儲(chǔ)需要事先把所有的位置規(guī)劃好伴箩,每個(gè)元素都要按照已經(jīng)標(biāo)注好的位置存放,是在幾號(hào)位置就在幾號(hào)位置鄙漏,都已經(jīng)安排好的嗤谚。而鏈?zhǔn)酱鎯?chǔ)只需要第一個(gè)元素知道了位置棺蛛,其他的元素只需要知道前面的元素及對(duì)應(yīng)的指針就行,存儲(chǔ)的位置地址會(huì)告訴元素呵恢。

綜上鞠值,邏輯結(jié)構(gòu)是面向問題的,是為了接近問題渗钉,物理結(jié)構(gòu)是面向計(jì)算機(jī)的彤恶,基本目標(biāo)是將數(shù)據(jù)集及其邏輯關(guān)系存儲(chǔ)到計(jì)算機(jī)的內(nèi)存中。

二鳄橘、抽象數(shù)據(jù)類型

2.1声离、數(shù)據(jù)類型

第一次接觸抽象事物時(shí)都比較難以理解的,我們要需要多想象一下瘫怜,多思考术徊,每個(gè)名詞的定義都是具備一定的規(guī)律,不會(huì)憑空想象的鲸湃,比如我們定義書赠涮,定義動(dòng)物,定義白電暗挑,黑電都是有一定的規(guī)劃歸類的笋除。在數(shù)據(jù)類型中,我們也是這樣定義的:是指一組性質(zhì)相同的值的集合及定義在此集合上的一些操作的總稱炸裆。

相同性質(zhì)的集合及操作,非單個(gè)數(shù)據(jù)元素烹看,在數(shù)據(jù)結(jié)構(gòu)中国拇,數(shù)據(jù)類型是按照值的不同進(jìn)行劃分的。在高級(jí)語言中惯殊,每個(gè)變量酱吝、常量和表達(dá)式都有各自的取值范圍。類型就是用來說明變量或表達(dá)式的取值范圍靠胜,和所能進(jìn)行的操作掉瞳。

當(dāng)時(shí)設(shè)計(jì)計(jì)算機(jī)語言的前輩,為什么要考慮數(shù)據(jù)類型吶浪漠,搞那么復(fù)雜干嘛,就用一個(gè)名稱來表示數(shù)字霎褐,一個(gè)符合表示操作不更好嗎址愿?現(xiàn)實(shí)中真的可以嗎?我們來看看一個(gè)案例冻璃?

大家都想要住房子响谓,當(dāng)然越大越好损合,不同的人經(jīng)濟(jì)實(shí)力不一樣,有錢人不可能跟我們黎民百姓一樣去住平房娘纷,房地產(chǎn)商根據(jù)這種情況嫁审,就推出來滿足不同階層的房子,有普通上班族的普通商品房赖晶、有滿足富豪的別墅律适,有單間,有錯(cuò)層的遏插;有一百多平的捂贿,也有幾十平的,甚至在一線城市還出現(xiàn)膠囊公寓胳嘲。厂僧。這樣就滿足了不同人的需要。

在計(jì)算機(jī)中了牛,內(nèi)存也不是無限大的颜屠,假如你要計(jì)算簡(jiǎn)單的加減法,顯然你開辟大量的內(nèi)存空間鹰祸,那就大材小用甫窟,浪費(fèi)資源,

于是乎福荸,我們根據(jù)數(shù)據(jù)進(jìn)行分類蕴坪,分出來多種數(shù)據(jù)類型。

java是強(qiáng)類型語言敬锐,所以java對(duì)于數(shù)據(jù)類型的規(guī)范會(huì)相對(duì)嚴(yán)格背传。本質(zhì)上講講數(shù)據(jù)類型分為兩種:

  • 基本類型:簡(jiǎn)單數(shù)據(jù)類型不能簡(jiǎn)化的、內(nèi)置的數(shù)據(jù)類型台夺,由編程語言本身定義的径玖,表示真實(shí)的數(shù)字、字符和整數(shù)颤介。

  • 引用類型:Java本身不支持C++中的結(jié)構(gòu)(struct)或聯(lián)合(union)數(shù)據(jù)類型梳星,它的復(fù)合數(shù)據(jù)類型一般都是通過類或接口進(jìn)行構(gòu)造,類提供了捆綁數(shù)據(jù)和方法的方式滚朵,同時(shí)可以針對(duì)程序外部進(jìn)行信息隱藏

2.2冤灾、基本類型

Java語言提供了八種基本類型。六種數(shù)字類型(四個(gè)整數(shù)型辕近,兩個(gè)浮點(diǎn)型)韵吨,一種字符類型,還有一種邏輯型(布爾型)移宅。俗稱四類八種:

  • 第一類:四種整數(shù)型 byte short int long

  • 第二類:兩種浮點(diǎn)型 float double

  • 第三類:一種邏輯型 boolean(它只有兩個(gè)值可取true false)

  • 第四類:一種字符型 char

在棧中可以直接分配內(nèi)存的數(shù)據(jù)是基本數(shù)據(jù)類型归粉。

java中默認(rèn)的整數(shù)類型是int類型椿疗,如果要定義為float型,則要在數(shù)值后加上l或L糠悼; 默認(rèn)的浮點(diǎn)型也是雙精度浮點(diǎn)届榄,如果要定義為float型,則要在數(shù)值后加上f或F倔喂。

2.3铝条、引用類型

在 Java 中一切都被視為了對(duì)象,但是我們操作的標(biāo)識(shí)符實(shí)際上是對(duì)象的一個(gè)引用(reference)

簡(jiǎn)單的說滴劲,引用其實(shí)就像是一個(gè)對(duì)象的名字或者別名 (alias)攻晒,一個(gè)對(duì)象在內(nèi)存中會(huì)請(qǐng)求一塊空間來保存數(shù)據(jù),根據(jù)對(duì)象的大小班挖,它可能需要占用的空間大小也不等鲁捏。訪問對(duì)象的時(shí)候,我們不會(huì)直接是訪問對(duì)象在內(nèi)存中的數(shù)據(jù)萧芙,而是通過引用去訪問给梅。引用也是一種數(shù)據(jù)類型,我們可以把它想象為類似 C++ 語言中指針的東西双揪,它指示了對(duì)象在內(nèi)存中的地址——只不過我們不能夠觀察到這個(gè)地址究竟是什么动羽。

如果我們定義了不止一個(gè)引用指向同一個(gè)對(duì)象,那么這些引用是不相同的渔期,因?yàn)橐靡彩且环N數(shù)據(jù)類型运吓,需要一定的內(nèi)存空間(stack,椃杼耍空間)來保存拘哨。但是它們的值是相同的,都指示同一個(gè)對(duì)象在內(nèi)存(heap信峻,堆空間)的中位置.

Java 對(duì)引用的概念進(jìn)行了擴(kuò)充倦青,將引用分為了:強(qiáng)引用(Strong Reference)、軟引用(Soft Reference)盹舞、弱引用(Weak Reference)产镐、虛引用(Phantom Reference)4 種,這 4 種引用的強(qiáng)度依次減弱踢步。在這里我們就不展開討論了癣亚。

image

三、今日總結(jié)

今天我們討論了數(shù)據(jù)結(jié)構(gòu)中結(jié)構(gòu)的定義获印,我們需要掌握到什么是結(jié)構(gòu)逃糟,什么是數(shù)據(jù)類型的知識(shí),在以后需要用到的時(shí)候蓬豁,我們能很好為歸類及應(yīng)用到它绰咽,

好了,今天就先介紹到這里地粪,明天我們來講解一下:數(shù)據(jù)結(jié)構(gòu)俗話說—數(shù)據(jù)結(jié)構(gòu)與算法的區(qū)別取募。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蟆技,隨后出現(xiàn)的幾起案子玩敏,更是在濱河造成了極大的恐慌,老刑警劉巖质礼,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旺聚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡眶蕉,警方通過查閱死者的電腦和手機(jī)砰粹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來造挽,“玉大人碱璃,你說我怎么就攤上這事》谷耄” “怎么了嵌器?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)谐丢。 經(jīng)常有香客問我爽航,道長(zhǎng),這世上最難降的妖魔是什么乾忱? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任讥珍,我火速辦了婚禮,結(jié)果婚禮上饭耳,老公的妹妹穿的比我還像新娘串述。我一直安慰自己,他們只是感情好寞肖,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布纲酗。 她就那樣靜靜地躺著,像睡著了一般新蟆。 火紅的嫁衣襯著肌膚如雪觅赊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天琼稻,我揣著相機(jī)與錄音吮螺,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鸠补,可吹牛的內(nèi)容都是我干的萝风。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼紫岩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼规惰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泉蝌,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤歇万,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后勋陪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贪磺,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年诅愚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寒锚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呻粹,死狀恐怖壕曼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情等浊,我是刑警寧澤腮郊,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站筹燕,受9級(jí)特大地震影響轧飞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撒踪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一过咬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧制妄,春花似錦掸绞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俺抽,卻和暖如春敞映,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磷斧。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工振愿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捷犹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓冕末,卻偏偏與公主長(zhǎng)得像萍歉,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栓霜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容