數據結構和算法到底有什么用,開發中能不能用到數據結構和算法(轉)


 你寫一個從中間彈出的棧,而不是從頂部彈出的棧,這是不是數據結構呢?如果參考書本的就不是吧,因為書中沒有這樣的。但是又基於書本的標准模型,所以又是。
    數據結構就是一個數據模型,如何組織數據存放,如何被操作的一系列的規則而已。而算法就是實現一個目的來操作這些數據模型的。
    那么到底數據結構和算法到底有什么用呢?開發中到底能不能用到數據結構和算法呢?
    數據結構我們通常理解為書中將的那些模型,實際上,那些是標准模型而已。而在實際的解決問題的過程中,你可以實現變種,也就是規則不完全和標准的一樣,而是與你的實現的功能相匹配。
    當然你也可以完全不用這些標准模型的任何數據結構模型,完全可以自己寫。比如我們寫一個圖書管理系統。我們要將書籍按照類別子類別和各種書籍信息來存儲。然后可以增刪改查。你可以不用數據結構的這些模型,你可以選擇數組。是的,一點也沒有錯。你可以使用數組,這是編程語言最基本的工具。
    要動態增加書籍,所以你要支持動態創建數組,然后要刪除原先的數組,將原先數組的數據復制到新數組。
    要支持刪除書籍,比如有些老舊的書籍不再有用了,可以當做垃圾處理了,就要從系統中刪除。所以可能要刪掉一個數組即同一類別的某幾本書,所以,你將其中幾個元素的刪掉,然后將后面的書籍往前挪一下。
    然后你會發現一本書入庫的時候,過了幾天后發現名字有一個錯別字,所以你要修改書名。然后就要去查找這本書,加入一次入庫了幾千本,然后這本書在中間哪一本,你就要從頭到尾的找這本書,書籍越多,越難找。
    找到之后就可以修改書的信息了。修改信息倒還好說。
    從以上幾點可以看到,我們還沒有說如何表示一本書的很多信息,當然,我們會用結構體數組來存儲。然而增刪查都特別費勁,效率會很低。而且編寫程序起來,特么復雜,很容易留下一個Bug,你再去看這個代碼時,你一定會頭疼的。
    上面是使用原始的數組來實現的,可以看到,或者你可以想象,實現的過程是多么麻煩。不僅開發效率低,而且整體的運行效率低,那么如何解決呢?自然就是用數據結構來建模,用算法來處理。

    那么圖書管理系統,就可以用樹結構來實現,這里不是功能實現圖,而是書籍分類存放目錄示意圖。如下圖所示:

 圖書管理系統書籍分類存放樹狀實現

    樹頂就是圖書管理系統根節點,然后子節點就是各個學科,學科的子節點就是各個子類目,子類目下面就是各個書籍的信息。並且用樹來表示,分類一目了然,你在實現這個管理過程時也是心中有樹操作起來也心中有數。因為這個結構和我們思維最接近,不然用數組都不知道用什么方式表示比較好,還是借鑒數據庫的經驗,用第一個元素做主鍵,用一個元素做外鍵,這樣來建立一個層次結構,不過這樣其實不直觀。而樹結構就非常好理解。

    那么你要入庫,就根據書籍的分類,使用廣度遍歷,然后找到對應的分類后繼續往下,一直到最后一個分類,然后添加一個樹葉即書籍信息。如果要刪除,也是如此遍歷,然后刪除一個。至於修改信息,數組和樹都是一樣的,都是對內存讀寫而已。你可以看到,這里沒有任何移動元素,復制就信息到新的地方的過程。所有的節點都是通過動態創建生成的,非常的靈活。
    從這里簡單列舉一個圖書管理系統的實現,就可以感受到樹模型與原始數組之間的差別,可以看到樹的很多優點。用樹來編程,你代表你的編程思想水平層次站的比較高,而不是停留在最原始的數組操作上。當然,一些簡單的算法,用數組效率是很高的,就不要用數據結構里的各種結構來操作。自己可以權衡效率和利弊,選擇最合適的使用。
    當然這里說的數據結構都是標准的結構。我們使用的算法如廣度優先遍歷算法就是書中講過的一個算法而已,他用於遍歷樹的。就和我們用循環遍歷數組的一個意思。因為樹是動態創建的節點鏈接起來的,不是連續的內存塊,所以不能和數組一樣順序遍歷,效率上直接比,肯定不如數組的。但是在各種功能實現上,數組太原始了。
    所以,數據結構是用來提高你的編程水平,可以實現更復雜的需求的。如果一個復雜的算法,或者一個復雜的系統,沒有數據結構的這些模型的使用,基本上就是不成熟的。使用數據結構開發也是要在思維里形成的,不是學了就行了。為什么你開發中用不上數據結構,是因為你沒有形成用數據結構方式高級編程。
    還有一個問題,就是在開發中,你不需要寫這些基本的數據結構模型實現,也不需要你寫標准的算法實現,你可以使用STL等算法庫,都幫你處理好了。你只需要調用這些算法庫函數即可達到目的,然而,如果你不懂的數據結構和算法,你用的溜嗎?也正是用這些庫讓很多人覺得學習數據結構沒有用。會用不能說明什么,用的好用的妙才是高手。
    很多開發需求,你無法使用標准的數據結構和算法來完成,也就是說,這些算法庫,很多都不能直接使用就能完成要求,所以你要基於標准的結構和算法加以改造,實現更符合業務需求的結構和算法,從而更好的實現功能。而這個就需要你有強大的數據結構和算法基礎了。
    如果你只是做簡單的碼農,使用幾個控件,調用幾個算法庫,調用幾個類庫,完成了一個功能,你就沾沾自喜,自以為是,那你就在走下坡路了。並且,這樣下去,你的水平就永遠提不高了。而且類庫不斷的迭代升級,你就不得不不斷的去學各種庫的用法,而且每次都學的累死累活的,因為你這些基礎不行,跟不上。而如果你基礎扎實,只不過是簡單熟悉一下罷了,對於人家實現的原理,分分鍾就可以掌握。這就是區別,大神和碼農的區別。
    那么到此,你知道數據結構的用處了嗎?你知道工作中是否需要數據結構,或者說,知道工作中一般如何使用數據結構了嗎?當然這里都是粗略的談論了一下,更加具體的你可以自己體會

 

原文章:http://www.cjjjs.com/paper/rjjc/20151219171746798.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM