這段時(shí)間蓝厌,開(kāi)啟了自己的數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之旅秦爆,從頭慢慢學(xué),本來(lái)參考的學(xué)習(xí)資料上面的示例代碼是C的蜻势,但是習(xí)慣了寫(xiě)java撑刺,就慢慢用java開(kāi)寫(xiě)~
參考資料《零基礎(chǔ)學(xué)數(shù)據(jù)結(jié)構(gòu)》第二版[機(jī)械工業(yè)出版社? 陳銳]
什么是數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)是一門(mén)研究如何用計(jì)算機(jī)描述事物及其關(guān)系的學(xué)問(wèn),是計(jì)算機(jī)學(xué)科的專(zhuān)業(yè)基礎(chǔ)課程握玛,數(shù)據(jù)結(jié)構(gòu)把數(shù)據(jù)劃分為“集合”够傍、“線(xiàn)”、“樹(shù)”和“圖”四種挠铲,后面三種為重點(diǎn)研究對(duì)象冕屯。
其中需要掌握的最重要的思想便是:如何將所面臨的問(wèn)題轉(zhuǎn)換為計(jì)算機(jī)語(yǔ)言。
直白一點(diǎn)就是將一堆基本的數(shù)據(jù)按照某種順序組織起來(lái)拂苹。
對(duì)應(yīng)實(shí)際的編程效果大概就是原來(lái)50行的代碼,采用某種結(jié)構(gòu)后現(xiàn)在只需要30行,emm大概就這種特效吧浴韭。
基本概念術(shù)語(yǔ)
1、數(shù)據(jù)
????????數(shù)據(jù)(data)是事實(shí)或觀察的結(jié)果念颈,是對(duì)客觀事物的邏輯歸納,是用于表示客觀事物的未經(jīng)加工的的原始素材榴芳。數(shù)據(jù)可以是連續(xù)的值嗡靡,比如聲音窟感、圖像,稱(chēng)為模擬數(shù)據(jù)肌括。也可以是離散的酣难,如符號(hào)谍夭、文字,稱(chēng)為數(shù)字?jǐn)?shù)據(jù)憨募。
2紧索、數(shù)據(jù)元素
????????它是數(shù)據(jù)的基本單位,數(shù)據(jù)元素也叫做結(jié)點(diǎn)或記錄菜谣。在計(jì)算機(jī)程序中通常作為一個(gè)整體進(jìn)行考慮和處理珠漂。有時(shí),一個(gè)數(shù)據(jù)元素可由若干個(gè)數(shù)據(jù)項(xiàng)組成尾膊,例如媳危,一本書(shū)的書(shū)目信息為一個(gè)數(shù)據(jù)元素,而書(shū)目信息的每一項(xiàng)(如書(shū)名冈敛、作者名等)為一個(gè)數(shù)據(jù)項(xiàng)待笑。數(shù)據(jù)項(xiàng)是數(shù)據(jù)的不可分割的最小單位。
3抓谴、數(shù)據(jù)對(duì)象
? ? ? ? 性質(zhì)相同的數(shù)據(jù)元素的集合暮蹂,是數(shù)據(jù)的一個(gè)子集。
4癌压、數(shù)據(jù)結(jié)構(gòu)
????????數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)仰泻、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合滩届。通常情況下集侯,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來(lái)更高的運(yùn)行或者存儲(chǔ)效率。
5、數(shù)據(jù)類(lèi)型
????????變量是用來(lái)存儲(chǔ)值的所在處浅悉,它們有名字和數(shù)據(jù)類(lèi)型趟据。變量的數(shù)據(jù)類(lèi)型決定了如何將代表這些值的位存儲(chǔ)到計(jì)算機(jī)的內(nèi)存中。在聲明變量時(shí)也可指定它的數(shù)據(jù)類(lèi)型术健。所有變量都具有數(shù)據(jù)類(lèi)型汹碱,以決定能夠存儲(chǔ)哪種數(shù)據(jù)。
數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)
一荞估、邏輯結(jié)構(gòu)
數(shù)據(jù)的邏輯結(jié)構(gòu)描述的是數(shù)據(jù)對(duì)象中元素之間的相互關(guān)系咳促。
1、集合
? ? emm和那個(gè)數(shù)學(xué)是的集合一個(gè)意思勘伺,一堆詩(shī)句要么屬于一個(gè)集合要么就沒(méi)有關(guān)系
2跪腹、線(xiàn)性結(jié)構(gòu)
? ? ? ? 數(shù)據(jù)元素之間的關(guān)系都是一對(duì)一的,而且都存在一種先后次序關(guān)系飞醉。
3冲茸、樹(shù)形結(jié)構(gòu)
? ? ? ? 元素之間存在一種一對(duì)多的層次關(guān)系
4、圖結(jié)構(gòu)
? ? ? ? 元素之間都是多對(duì)多的關(guān)系缅帘,類(lèi)似一張網(wǎng)把所有元素連在一起轴术。
二、存儲(chǔ)結(jié)構(gòu)
又叫物理結(jié)構(gòu)钦无,是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的存儲(chǔ)形式逗栽。
1、順序存儲(chǔ)結(jié)構(gòu)
? ? ? ? 把數(shù)據(jù)存儲(chǔ)在一組地址連續(xù)的存儲(chǔ)單元中失暂,邏輯關(guān)系和物理關(guān)系一致~
2彼宠、鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
? ? ? ? 數(shù)據(jù)可以是連續(xù)的存儲(chǔ)也可以不連續(xù),依靠指針來(lái)表示數(shù)據(jù)元素之間的邏輯結(jié)構(gòu)弟塞。
算法
算法是解決特定問(wèn)題的步驟的描述凭峡,算法具有有窮性,確定性决记,可行性,輸入和輸出按价,表示算法在執(zhí)行有限的步驟后會(huì)自動(dòng)結(jié)束笙瑟。不會(huì)自己進(jìn)入無(wú)限循環(huán),且算法的每一步都有明確的含義框产,且每一步都是可行的,且算法需要輸入秉宿,能根據(jù)輸入得到最終的結(jié)果。
通俗的說(shuō)算法就是一道菜的做法膊存,比如做一碗泡面忱叭,我們需要拆開(kāi)袋子,燒好開(kāi)水爵卒,拿出調(diào)料撵彻,把調(diào)料撒好。把面泡好陌僵,而對(duì)于這份泡面的做法我們的輸入就是一袋泡面,而輸出就是一碗泡面,而不同做泡面的方法決定著泡面好不好吃摆霉,有沒(méi)有靈魂,復(fù)不復(fù)雜搭盾,大概這就是算法婉支,大家可以理解下
對(duì)于算法我們需要保證以下幾點(diǎn)
1、算法的正確性
? ? 確定我們最終做好的是泡面而不是掛面
2蝌以、算法的可讀性
? ? 做泡面的步驟不要寫(xiě)的花里胡哨的何之,我需要清晰明了的讓人知道怎么做泡面
3、算法的健壯性
? ? 我們要對(duì)用戶(hù)的異常輸入進(jìn)行及時(shí)的判斷徊件,比如我在做法中說(shuō),我必須要泡面如果是其他的虱痕,你就參考其他的做法,這就異常處理
4硝训、高效率和低存儲(chǔ)量
? ? 我這個(gè)泡面的做法略就,只需要幾行字就寫(xiě)出來(lái)了,而且做起來(lái)特別快窄绒,不需要幾個(gè)小時(shí)
算法的其他概念知識(shí)可以參考書(shū)本崔兴,相信會(huì)有更好的理解
第一次寫(xiě)文章,比較雜亂位谋,多多包涵堰燎。