為什麼要學資料結構?
一、前言
在視覺化化程式設計的今天,藉助於整合開發環境可以很快地生成程式,程式設計不再是計算機專業人員的專利。很多人認為,只要掌握幾種開發工具就可以成為程式設計高手,其實,這是一種誤解。要想成為一個專業的開發人員,至少需要以下三個條件:
1) 能夠熟練地選擇和設計各種資料結構和演算法
2) 至少要能夠熟練地掌握一門程式設計語言
3) 熟知所涉及的相關應用領域的知識
其中,後兩個條件比較容易實現,而第一個條件則需要花相當的時間和精力才能夠達到,它是區分一個程式設計人員水平高低的一個 重要標誌,資料結構 貫穿程式設計的始終 ,缺乏資料結構和演算法的深厚功底,很難設計出高水平的具有專業水準的應用程式。曾經有一本經典計算機專業書籍叫做《資料結構+演算法=程式》,也說明了資料結構和演算法的重要性。
二、為什麼要學資料結構
- 資料結構是所有計算機專業的同學必學的一門課程
- 資料結構研究的是資料如何再計算機中進行組織和儲存,使得我們可以高效的獲取資料或者修改資料
計算機專業的學生都開設過資料結構課程,它是計算機學科知識結構的核心和技術體系的基石。資料結構作為計算機專業的專業基礎課程,是計算機 考研 的 必考 科目之一,如果有打算報考計算機專業的研究生,這門資料結構你是必須要學好它的,同時,工作以後的同學,會有想去報考計算機 軟考 、計算機 等級考試 的,資料結構也是必考的內容之一,科學技術在飛速發展,但是作為基石的科學技術沒有動搖,由於近年來演算法工程師的高薪火爆,使得資料結構的重視程式空前高漲,總而言之,既然我們已經與計算機接軌就必須 掌握 好它。
三、資料結構無處不在
不管你是IT開發,還是其他崗位的工作人員,或者是遊戲愛好者,只要你用過電腦,那麼你就接觸過資料結構,下面我們就來講一講,資料結構究竟是如何 無處不在 的。
3.1 資料庫
不管你是從事IT工作的,還是準備從事IT開發的,資料庫一定是瞭解的,我們知道,資料庫查詢是資料庫的最主要功能之一。我們都希望查詢資料的速度能儘可能的快,因此資料庫系統的設計者會從查詢演算法的角度進行優化。最基本的查詢演算法當然是順序查詢(linear search),這種複雜度為 O(n)
的演算法在資料量很大時顯然是糟糕的,好在電腦科學的發展提供了很多更優秀的查詢演算法,例如 二分查詢(binary search)、二叉樹查詢(binary tree search)
等。如果稍微分析一下會發現,每種查詢演算法都只能應用於特定的資料結構之上,但是資料本身的組織結構不可能完全滿足各種資料結構,所以,在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是 索引 ,索引是一種幫助MySQL高效獲取資料的 排好序 的 資料結構,其中MySQL使用的資料結構為 B+Tree。
3.2 作業系統
相信現在的我們常用的作業系統大家一定都知道吧,例如:比爾蓋茲大叔成立的微軟的 Windows
作業系統,大神賈伯斯蘋果的 Mac OS
,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<String,String> map = new HashMap<>();
5) 樹: 1.場景管理中的四叉樹;2.遊戲UI裡的選單一般是分級的,一個主頁面可以衍生出很多的子頁面的時候,使用樹來管理這些選單是很合適的做法。
6) 圖: A*尋路演算法、DFS、BFS
遊戲也是採用了大量的演算法,都需要以資料結構為基石,就最簡單的功能尋路,滑鼠從A點到B點,這個角色就需要尋找一條從A點到B點的路,這條路還需要繞過所有的障礙物,甚至還需要找出最短的路徑,這就是最經典的 圖論演算法,在圖論演算法種就使用了大量的資料結構。
四、資料結構型別
在計算機領域有一句名言 資料結構+演算法=程式,而資料結構本身就是演算法的基石,在近乎任何一本演算法教材,都花了大量的時間講解資料結構,學好資料結構和演算法可以讓我們在計算機這條道路上走的更遠。如果資料結構是因為它無處不在,學好資料結構是使我們快速成長的墊腳石。
在接下面的幾篇文章中,我會為大家更新資料結構中:陣列、棧、佇列、連結串列、二分搜尋樹、堆、線段樹、Trie、並查集、紅黑樹以及雜湊表等等...
的詳細講解,感興趣的同學記得關注我,我是牧小農,我喂自己帶鹽。
相關文章
- 為什麼要學習資料結構和演算法?資料結構演算法
- 我們為什麼要學習資料結構和演算法?(一)資料結構演算法
- 《資料結構與演算法JavaScript描述》選讀:為什麼要學習資料結構和演算法資料結構演算法JavaScript
- 《資料結構與演算法之美》為什麼要學習資料結構和演算法 (讀後感)資料結構演算法
- 資料治理為什麼要清洗資料
- 乾貨 | 學習大資料為什麼要先學Java?大資料Java
- 如果業界中不用高階演算法和資料結構,那為什麼還要學?演算法資料結構
- 什麼是結構化資料?什麼是半結構化資料?
- 大資料和Hadoop什麼關係?為什麼大資料要學習Hadoop?大資料Hadoop
- 為什麼我害怕資料結構學得好的程式設計師?資料結構程式設計師
- 什麼是資料結構資料結構
- 為什麼演算法和資料結構重要?演算法資料結構
- 為什麼要學習 RustRust
- 為什麼要學習 Julia
- 為什麼要學習 Vim?
- 為什麼要建立資料視覺化視覺化
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- 大資料能做什麼,為什麼學大資料大資料
- 資料是什麼——資料的結構
- Mysql索引資料結構為什麼是B+樹?MySql索引資料結構
- 為什麼要學習Netty?Netty
- 為什麼我要學習“機器學習”?機器學習
- 我為什麼要學技術
- 為什麼要選擇分散式資料庫?分散式資料庫
- 企業為什麼要建資料倉儲?
- 為什麼要備份資料? 如何做?
- 為什麼要對資料庫最佳化資料庫
- 好端端的資料結構,為什麼叫它SB樹呢?資料結構
- 為什麼我要放棄javaScript資料結構與演算法(第二章)——陣列JavaScript資料結構演算法陣列
- 資料庫倉庫系列:(一)什麼是資料倉儲,為什麼要資料倉儲資料庫
- 資料市場觀察(一)我們為什麼要大資料?大資料
- 重構模式(二)---- 為什麼要 Refactoring模式
- 為什麼想成為 Geeker 的人要學習 JSJS
- python演算法與資料結構-什麼是資料結構Python演算法資料結構
- Python優勢是什麼?為什麼要學習?Python
- React元件方法中為什麼要繫結thisReact元件
- 大資料分析師要學什麼專業?大資料