成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)結(jié)構(gòu)和算法

cyixlq / 1340人閱讀

摘要:數(shù)據(jù)在內(nèi)存中的存儲結(jié)構(gòu),也就是物理結(jié)構(gòu),分為兩種順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。數(shù)組就是順序存儲結(jié)構(gòu)的典型代表。即談數(shù)據(jù)結(jié)構(gòu)又談算法才能夠真正裝爺。

什么是數(shù)據(jù)結(jié)構(gòu)
概念
官方定義:

數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設(shè)計問題中的操作對象,以及它們之間的關(guān)系和操作等相關(guān)問題的學(xué)科。

我的理解:

程序設(shè)計 = 數(shù)據(jù)結(jié)構(gòu) + 算法

數(shù)據(jù)結(jié)構(gòu),顧名思義,就是數(shù)據(jù)之間的結(jié)構(gòu)關(guān)系,或者理解成數(shù)據(jù)元素相互之間存在的一種或多種特定關(guān)系的集合。當(dāng)然這些概念都是大學(xué)喜歡考的,我們沒必要糾結(jié)于這個概念,有自己恰當(dāng)?shù)?、并且可以為他人所接受的解釋就可以?/p>

數(shù)據(jù)結(jié)構(gòu)中結(jié)構(gòu)的概念
數(shù)據(jù)結(jié)構(gòu)中的結(jié)構(gòu),也就是我們研究的主體對象。數(shù)據(jù)結(jié)構(gòu)中我們很少研究數(shù)據(jù),因為數(shù)據(jù)在內(nèi)存中的表現(xiàn)形式對于我們都是一樣的,也就是二進制。傳統(tǒng)上,我們把數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。

邏輯結(jié)構(gòu)

指反映數(shù)據(jù)元素之間的邏輯關(guān)系的數(shù)據(jù)結(jié)構(gòu),其中的邏輯關(guān)系是指數(shù)據(jù)元素之間的前后關(guān)系,而與他們在計算機中的存儲位置無關(guān)。邏輯結(jié)構(gòu)分為以下四類:

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

集合結(jié)構(gòu)中的數(shù)據(jù)元素同屬于一個集合,他們之間是并列的關(guān)系,除此之外沒有其他關(guān)系。如下圖,可以很好的表示集合結(jié)構(gòu)中的元素之間的關(guān)系:

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

線性結(jié)構(gòu)中的元素存在一對一的相互關(guān)系。如下圖,可以很好的表示線性結(jié)構(gòu)中的元素之間的關(guān)系:

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

樹形結(jié)構(gòu)中的元素存在一對多的相互關(guān)系。如下圖,可以很好的表示樹形結(jié)構(gòu)中的元素之間的關(guān)系:

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

圖形結(jié)構(gòu)中的元素存在多對多的相互關(guān)系。如下圖,可以很好的表示圖形結(jié)構(gòu)中的元素之間的關(guān)系:

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

物理結(jié)構(gòu)又叫存儲結(jié)構(gòu),指數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機存儲空間的存放形式。通俗的講,物理結(jié)構(gòu)研究的是數(shù)據(jù)在存儲器中存放的形式。 存儲器主要針對于內(nèi)存而言,像硬盤、軟盤、光盤等外部存儲器的數(shù)據(jù)組織通常用文件結(jié)構(gòu)來描述。

數(shù)據(jù)在內(nèi)存中的存儲結(jié)構(gòu),也就是物理結(jié)構(gòu),分為兩種:順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。

順序存儲結(jié)構(gòu)

順序存儲結(jié)構(gòu):是把數(shù)據(jù)元素存放在地址連續(xù)的存儲單元里,其數(shù)據(jù)間的邏輯關(guān)系和物理關(guān)系是一致的。數(shù)組就是順序存儲結(jié)構(gòu)的典型代表。其在內(nèi)存中的存儲形式類似于下圖:

鏈?zhǔn)酱鎯Y(jié)構(gòu)

鏈?zhǔn)酱鎯Y(jié)構(gòu):是把數(shù)據(jù)元素存放在內(nèi)存中的任意存儲單元里,也就是可以把數(shù)據(jù)存放在內(nèi)存的各個位置。這些數(shù)據(jù)在內(nèi)存中的地址可以是連續(xù)的,也可以是不連續(xù)的。

和順序存儲結(jié)構(gòu)不同的是,鏈?zhǔn)酱鎯Y(jié)構(gòu)的數(shù)據(jù)元素之間是通過指針來連接的,我們可以通使用指針來找到某個數(shù)據(jù)元素的位置,然后對這個數(shù)據(jù)元素進行一些操作。如下圖,可以幫助我們理解鏈?zhǔn)酱鎯Y(jié)構(gòu):

順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)的區(qū)別

打個比方說一下順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)的區(qū)別:
比如去銀行取錢,順序存儲結(jié)構(gòu)就相當(dāng)于,所有的客戶按照先來后到的順序有序的的坐在大廳的椅子上(注意:是有順序的坐著哦)。
而鏈?zhǔn)酱鎯Y(jié)構(gòu)相當(dāng)于,所有的客戶只要一到銀行,大堂經(jīng)理就給他們每人一個號碼,然后他們可以隨便坐在哪個椅子上(隨便坐,不需要按照什么順序坐),只需要等待工作人員廣播叫號即可。
而每個客戶手里的號碼就相當(dāng)于指針,當(dāng)前的指針指向下一個存儲空間,這樣,所有不連續(xù)的空間就可以被有順序的按照線性連接在一起了。
算法
說到數(shù)據(jù)結(jié)構(gòu),必須要一并帶上算法,在筆者看來,不談算法的數(shù)據(jù)結(jié)構(gòu)只是你理解了概念,只能夠出去裝X而已。即談數(shù)據(jù)結(jié)構(gòu)又談算法才能夠真正裝爺。只可惜,以我現(xiàn)在腦海里殘留的一點概念,我出去只能夠裝X。廢話少說,直接行干貨!

算法的概念
是指解題方案的準(zhǔn)確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機制。

以上是我在百度百科找到的解釋,在我看來,算法就是求解一個問題所需要的步驟所形成的解決方法,每一步包括一個或者多個操作。無論是現(xiàn)實生活中還是計算機中,解決同一個問題的方法可能有很多種,在這N多種算法中,肯定存在一個執(zhí)行效率最快的方法,那么這個方法就是最優(yōu)算法。

算法的特性
算法具有五個基本特征:輸入、輸出、有窮性、確定性和可行性。

輸入

一個算法具有零個或者多個輸出。以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定出了初始條件。后面一句話翻譯過來就是,如果一個算法本身給出了初始條件,那么可以沒有輸出。比如,打印一句話:NSLog(@"你最牛逼!");

輸出

算法至少有一個輸出。也就是說,算法一定要有輸出。輸出的形式可以是打印,也可以使返回一個值或者多個值等。也可以是顯示某些提示。

有窮性

算法的執(zhí)行步驟是有限的,算法的執(zhí)行時間也是有限的。

確定性

算法的每個步驟都有確定的含義,不會出現(xiàn)二義性。
可行性

算法是可用的,也就是能夠解決當(dāng)前問題。
當(dāng)然,回過頭來一看,這五個特性都是廢話,并且依稀記得大學(xué)老師都教過。所以,我們不用浪費腦力在這些不必要的概念上,因為大學(xué)早已離我遠去,考試什么的跟我也沒有一毛錢關(guān)系,只要知道這么回事就好。
算法的設(shè)計要求
要設(shè)計一個好的算法,需要考慮以下4個特性(其實多半是廢話)。

正確性

廢話,誰會設(shè)計一個不能夠解決問題的方法。

可讀性

指算法無論是從設(shè)計思路上,還是從注釋方面,都要能夠保證算法是可讀的,也就是可以被其他人員能夠讀懂的。其實也是廢話,這是一個優(yōu)秀的程序員必備的。

健壯性

通俗的講,一個好的算法應(yīng)該具有捕獲異常/處理異常的能力。另外,對于測試人員的壓力測試、邊界值測試等刁難的測試手段,算法應(yīng)該能夠輕松的扛過去。

時間效率高和存儲量低

這其實是兩個概念,時間效率就是指的時間復(fù)雜度,存儲量就是指的空間復(fù)雜度。翻譯過來就是一個好的算法應(yīng)該考慮時間復(fù)雜度和空間復(fù)雜度。而往往時間復(fù)雜度和空間復(fù)雜度是相互彌補的。也就是從某些角度,我們可以了通過犧牲算法運算時間的方式來減少對內(nèi)存的占用,反之亦然。對于時間復(fù)雜度和空間復(fù)雜度這兩個概念,大家不用泰國迷惑,我會拿出來一篇文章專門講解,請大家稍安勿躁,持續(xù)關(guān)注。

PS:本篇文章是一個簡單的開始,里面涉及了一些概念大家不必太過計較,以后的文章中會逐步的對這些概念進行展開講解。請大家不要急躁,不要氣餒!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23031.html

相關(guān)文章

  • 優(yōu)秀程序員都應(yīng)該學(xué)習(xí)的 GitHub 上開源的數(shù)據(jù)結(jié)構(gòu)算法項目

    摘要:強烈推薦上值得前端學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)與算法項目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數(shù)據(jù)結(jié)構(gòu),提供進一步閱讀的解釋和鏈接。數(shù)據(jù)結(jié)構(gòu)和算法必知必會的個代碼實現(xiàn)。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就算招式練的再花哨,終究成不了高手;只有內(nèi)功深厚者,前端之路才會走得...

    cheukyin 評論0 收藏0
  • 用 PHP 的方式實現(xiàn)的各類算法合集

    摘要:數(shù)據(jù)項是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項是對客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...

    Karrdy 評論0 收藏0
  • 用 PHP 的方式實現(xiàn)的各類算法合集

    摘要:數(shù)據(jù)項是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項是對客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...

    pakolagij 評論0 收藏0
  • 用 PHP 的方式實現(xiàn)的各類算法合集

    摘要:數(shù)據(jù)項是數(shù)據(jù)的不可分割的最小單位。數(shù)據(jù)項是對客觀事物某一方面特性的數(shù)據(jù)描述。數(shù)據(jù)對象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個子集。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。 項目地址 https://github.com/m9rco/algo... 每周最少一更,求出題,求虐待 At least once a week, ask for problems and abuse 簡...

    leonardofed 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<