為什么要學數據結構?
本文轉載自微信公眾號「 牧小農」,作者 牧小農 。轉載本文請聯系 牧小農公眾號。
一、前言
在可視化化程序設計的今天,借助于集成開發環境可以很快地生成程序,程序設計不再是計算機專業人員的專利。很多人認為,只要掌握幾種開發工具就可以成為編程高手,其實,這是一種誤解。要想成為一個專業的開發人員,至少需要以下三個條件:
1) 能夠熟練地選擇和設計各種數據結構和算法
2) 至少要能夠熟練地掌握一門程序設計語言
3) 熟知所涉及的相關應用領域的知識
其中,后兩個條件比較容易實現,而第一個條件則需要花相當的時間和精力才能夠達到,它是區分一個程序設計人員水平高低的一個 重要標志,數據結構 貫穿程序設計的始終 ,缺乏數據結構和算法的深厚功底,很難設計出高水平的具有專業水準的應用程序。曾經有一本經典計算機專業書籍叫做《數據結構+算法=程序》,也說明了數據結構和算法的重要性。
二、為什么要學數據結構
- 數據結構是所有計算機專業的同學必學的一門課程
- 數據結構研究的是數據如何在計算機中進行組織和存儲,使得我們可以高效的獲取數據或者修改數據
計算機專業的學生都開設過數據結構課程,它是計算機學科知識結構的核心和技術體系的基石。數據結構作為計算機專業的專業基礎課程,是計算機 考研 的 必考 科目之一,如果有打算報考計算機專業的研究生,這門數據結構你是必須要學好它的,同時,工作以后的同學,會有想去報考計算機 軟考 、計算機 等級考試 的,數據結構也是必考的內容之一,科學技術在飛速發展,但是作為基石的科學技術沒有動搖,由于近年來算法工程師的高薪火爆,使得數據結構的重視程序空前高漲,總而言之,既然我們已經與計算機接軌就必須 掌握 好它。
三、數據結構無處不在
不管你是IT開發,還是其他崗位的工作人員,或者是游戲愛好者,只要你用過電腦,那么你就接觸過數據結構,下面我們就來講一講,數據結構究竟是如何 無處不在 的。
3.1 數據庫
不管你是從事IT工作的,還是準備從事IT開發的,數據庫一定是了解的,我們知道,數據庫查詢是數據庫的最主要功能之一。我們都希望查詢數據的速度能盡可能的快,因此數據庫系統的設計者會從查詢算法的角度進行優化。最基本的查詢算法當然是順序查找(linearsearch),這種復雜度為 O(n)的算法在數據量很大時顯然是糟糕的,好在計算機科學的發展提供了很多更優秀的查找算法,例如 二分查找(binary search)、二叉樹查找(binary tree search)等。如果稍微分析一下會發現,每種查找算法都只能應用于特定的數據結構之上,但是數據本身的組織結構不可能完全滿足各種數據結構,所以,在數據之外,數據庫系統還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找算法。這種數據結構,就是 索引 ,索引是一種幫助MySQL高效獲取數據的 排好序 的 數據結構,其中MySQL使用的數據結構為B+Tree。
3.2 操作系統
相信現在的我們常用的操作系統大家一定都知道吧,例如:比爾蓋茨大叔成立的微軟的 Windows操作系統,大神喬布斯蘋果的 MacOS,Java開發常用的 Linux系統,由林納斯·本納第克特·托瓦茲開發(百度來的),還有redhat、Solaris、SunCobalt等等,都有使用到數據結構中的,系統棧以及優先隊列:堆
3.3 文件壓縮
比如:RAR壓縮軟件、PNG圖片、MAP3文件等等,都會使用數據結構,對數據進行壓縮(很怕打成了亞索,心虛),而使用壓縮的算法是一種樹結構叫 哈夫曼樹 。
3.4 游戲
1) 數組:需處理的元素個數確定并且需使用下標時可以考慮,不過建議用泛型List 優點:數組在內存中是連續存儲的,索引和修改的速度都非常快 缺點:插入和刪除很慢,長度開辟過長易造成內存浪費,長度開辟過短易造成內存越界
2) List:List是泛型的,即List,需處理的元素個數可以不確定,不存在裝箱與拆箱,建議多用;而ArrayList:ArrayList list1 = new ArrayList(); ArrayList的元素屬于 object 類型存在裝箱與拆箱,很損耗性能。,List的底層數據結構就是數組。
- List<string> list = new List<string>();
- //新增數據
- list.Add(“abc”);
- //修改數據
- list[0] = “def”;
- //移除數據
- list.RemoveAt(0);
- //錯誤操作,因為數據的類型不是string
- list.add(123);
3) 鏈表:常用來維護、管理那些需要頻繁產生、消除的游戲對象,比如:消除類游戲中需要消除的對象。
4) HashMap:底層是哈希表,是鍵值對容器,用于處理key/value鍵值對;底層使用的是數組+鏈表的結構:Map
6) 圖:A*尋路算法、DFS、BFS
游戲也是采用了大量的算法,都需要以數據結構為基石,就最簡單的功能尋路,鼠標從A點到B點,這個角色就需要尋找一條從A點到B點的路,這條路還需要繞過所有的障礙物,甚至還需要找出最短的路徑,這就是最經典的 圖論算法,在圖論算法中就使用了大量的數據結構。
四、數據結構類型
在計算機領域有一句名言 數據結構+算法=程序,而數據結構本身就是算法的基石,在近乎任何一本算法教材,都花了大量的時間講解數據結構,學好數據結構和算法可以讓我們在計算機這條道路上走的更遠。如果數據結構是因為它無處不在,學好數據結構是使我們快速成長的墊腳石。
在接下面的幾篇文章中,我會為大家更新數據結構中:數組、棧、隊列、鏈表、二分搜索樹、堆、線段樹、Trie、并查集、紅黑樹以及哈希表等等...的詳細講解,感興趣的同學記得關注我,我是牧小農,我喂自己帶鹽。






























