<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 數據結構與算法 ## 1. 什么是數據結構 ~~~ 官方解釋: 數據結構是一門研究非數值計算的程序設計問題中的操作對象,以及他們之間的關系和操作等相關問題的學科。 大白話: 數據結構就是把數據元素按照一定的關系組織起來的集合,用來組織和存儲數據 ~~~ ## 2. 數據結構分類 **傳統上,我們可以把數據結構分為邏輯結構和物理結構兩大類。** ### 2.1邏輯結構分類: 邏輯結構是從具體問題中抽象出來的模型,是抽象意義上的結構,按照對象中數據元素之間的相互關系分類,也是 我們后面課題中需要關注和討論的問題。 **a.集合結構:集合結構中數據元素除了屬于同一個集合外,他們之間沒有任何其他的關系。** ![](https://img.kancloud.cn/05/5b/055bcc27bb972228d8b95dbbdad26995_2050x676.jpg) **b.線性結構:線性結構中的數據元素之間存在一對一的關系** ![](https://img.kancloud.cn/2a/b2/2ab22a99befe9f40aa2354efe61a7864_1938x606.jpg) **c.樹形結構:樹形結構中的數據元素之間存在一對多的層次關系** ![](https://img.kancloud.cn/ea/b8/eab82eb9eb890d6600c591b8ea778fed_2050x598.jpg) **d.圖形結構:圖形結構的數據元素是多對多的關系** ![](https://img.kancloud.cn/83/65/83659c6ca293a37e32582b0099b862b2_2048x672.jpg) ### 2.2物理結構分類: 邏輯結構在計算機中真正的表示方式(又稱為映像)稱為物理結構,也可以叫做存儲結構。常見的物理結構有順序 存儲結構、鏈式存儲結構。 **順序存儲結構:** 把數據元素放到地址連續的存儲單元里面,其數據間的邏輯關系和物理關系是一致的 ,比如我們常用的數組就是 順序存儲結構。 ![](https://img.kancloud.cn/49/d7/49d72587d74d9d4162b04097367c444e_2022x260.png) **鏈式存儲結構:** 順序存儲結構存在一定的弊端,就像生活中排時也會有人插隊也可能有人有特殊情況突然離開,這時候整個結構都 處于變化中,此時就需要鏈式存儲結構。 鏈式存儲結構是把數據元素存放在任意的存儲單元里面,這組存儲單元可以是連續的也可以是不連續的。此時,數據元素之間并 不能反映元素間的邏輯關系,因此在鏈式存儲結構中引進了一個指針存放數據元素的地址,這樣通過地址就可以找 到相關聯數據元素的位置 ![](https://img.kancloud.cn/df/ff/dfff6a8e2b7dfc8ad3562cd342c35a6f_2064x916.jpg) ## 3. 什么是算法 **官方解釋:** 算法是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統的方法解決問題的策略 機制。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。 **大白話:** 根據一定的條件,對一些數據進行計算,得到需要的結果。 ### 3.1算法初體驗 在生活中,我們如果遇到某個問題,常常解決方案不是唯一的。 ~~~ 例如從西安到北京,如何去?會有不同的解決方案,我們可以坐飛機,可以坐火車,可以坐汽車,甚至可以步行, 不同的解決方案帶來的時間成本和金錢成本是不一樣的,比如坐飛機用的時間最少,但是費用最高,步行費用最 低,但時間最長。 ~~~ ~~~ 再例如在北京二環內買一套四合院,如何付款?也會有不同的解決方案,可以一次性現金付清,也可以通過銀行做 按揭。 這兩種解決方案帶來的成本也不一樣,一次性付清,雖然當時出的錢多,壓力大,但是沒有利息,按揭雖然 當時出的錢少, 壓力比較小,但是會有利息,而且30年的總利息幾乎是貸款額度的一倍,需要多付錢。 ~~~ 在程序中,我們也可以用不同的算法解決相同的問題,而不同的算法的成本也是不相同的。總體上,一個優秀的算 法追求以下兩個目標: 1. 花最少的時間完成需求; 2. 占用最少的內存空間完成需求; ### 3.2算法實踐 **需求1:計算1到100的和** 解法1: ``` public function get100Sum(){ $sum=0; $n=100; for ($i=1; $i<$n ; $i++) { $sum+=$i; } echo "1到100的和是:".$sum; } ``` 解法2: ``` public function getSum100(){ $sum=0; $n=100; $sum = ($n+1)*$n/2 echo "1到100的和是:".$sum; } ``` 第一種解法要完成需求,要完成以下幾個動作: 1.定義兩個整型變量; 2.執行100次加法運算; 3.打印結果到控制臺; 第二種解法要完成需求,要完成以下幾個動作: 1.定義兩個整型變量; 2.執行1次加法運算,1次乘法運算,一次除法運算,總共3次運算; 3.打印結果到控制臺; 很明顯,第二種算法完成需求,花費的時間更少一些。 **需求2: 計算10的階乘** 解法1: ``` static function fun1($n){ if($n==1){ return 1; } return $n*self::fun1($n-1); } ``` 解法2: ``` static function fun1($n){ $res=1; for ($i=1; $i<=$n ; $i++) { $res*=$i; } return $res; } ``` 第一種解法,使用遞歸完成需求,fun1方法會執行10次,并且第一次執行未完畢,調用第二次執行,第二次執行 未完畢,調用第三次執行...最終,最多的時候,需要在棧內存同時開辟10塊內存分別執行10個fun1方法。 第二種解法,使用for循環完成需求,fun2方法只會執行一次,最終,只需要在棧內存開辟一塊內存執行fun2方法 即可。 很明顯,第二種算法完成需求,占用的內存空間更小。 ## 4.總結 以上就是數據結構與算法的概述,我悶在實際開發中,使用不同的算法,不同的數據結構會對我們的查詢速度產生很大的影響,后續會給大家介紹如何選擇數據結構以及算法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看