文章目錄
四、資料結構型別
在視覺化化程式設計的今天,借助於整合開發環境可以很快地生成程式,程式設計不再是計算機專業人員的專利。很多人認為,只要掌握幾種開發工具就可以成為程式設計高手,其實,這是一種誤解。要想成為乙個專業的開發人員,至少需要以下三個條件:
1) 能夠熟練地選擇和設計各種資料結構和演算法
2) 至少要能夠熟練地掌握一門程式語言
3) 熟知所涉及的相關應用領域的知識
其中,後兩個條件比較容易實現,而第乙個條件則需要花相當的時間和精力才能夠達到,它是區分乙個程式設計人員水平高低的乙個重要標誌,資料結構貫穿程式設計的始終,缺乏資料結構和演算法的深厚功底,很難設計出高水平的具有專業水準的應用程式。曾經有一本經典計算機專業書籍叫做《資料結構+演算法=程式》,也說明了資料結構和演算法的重要性。
計算機專業的學生都開設過資料結構課程,它是計算機學科知識結構的核心和技術體系的基石。資料結構作為計算機專業的專業基礎課程,是計算機考研的必考科目之一,如果有打算報考計算機專業的研究生,這門資料結構你是必須要學好它的,同時,工作以後的同學,會有想去報考計算機軟考、計算機等級考試的,資料結構也是必考的內容之一,科學技術在飛速發展,但是作為基石的科學技術沒有動搖,由於近年來演算法工程師的高薪火爆,使得資料結構的重視程式空前高漲,總而言之,既然我們已經與計算機接軌就必須掌握好它。
不管你是it開發,還是其他崗位的工作人員,或者是遊戲愛好者,只要你用過電腦,那麼你就接觸過資料結構,下面我們就來講一講,資料結構究竟是如何無處不在的。
3.1 資料庫
不管你是從事it工作的,還是準備從事it開發的,資料庫一定是了解的,我們知道,資料庫查詢是資料庫的最主要功能之一。我們都希望查詢資料的速度能盡可能的快,因此資料庫系統的設計者會從查詢演算法的角度進行優化。最基本的查詢演算法當然是順序查詢(linear search),這種複雜度為o(n)
的演算法在資料量很大時顯然是糟糕的,好在電腦科學的發展提供了很多更優秀的查詢演算法,例如二分查詢(binary search)、二叉樹查詢(binary tree search)
等。如果稍微分析一下會發現,每種查詢演算法都只能應用於特定的資料結構之上,但是資料本身的組織結構不可能完全滿足各種資料結構,所以,在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引,索引是一種幫助mysql高效獲取資料的排好序的資料結構,其中mysql使用的資料結構為b+tree。
3.2 作業系統
3.3 檔案壓縮
比如:rar壓縮軟體、png、map3檔案等等,都會使用資料結構,對資料進行壓縮(很怕打成了亞索,心虛),而使用壓縮的演算法是一種樹結構叫哈夫曼樹。
3.4 遊戲
1) 陣列:需處理的元素個數確定並且需使用下標時可以考慮,不過建議用泛型list
優點:陣列在記憶體中是連續儲存的,索引和修改的速度都非常快
缺點:插入和刪除很慢,長度開闢過長易造成記憶體浪費,長度開闢過短易造成記憶體越界
2) list: list是泛型的,即list,需處理的元素個數可以不確定,不存在裝箱與拆箱,建議多用;而arraylist:arraylist list1 = new arraylist(); arraylist的元素屬於 object 型別存在裝箱與拆箱,很損耗效能。,list的底層資料結構就是陣列。
list
list =
newlist
();//新增資料
list.
add(「abc」)
;//修改資料
list[0]
= 「def」;
//移除資料
list.
removeat(0
);//錯誤操作,因為資料的型別不是string
list.
add(
123)
;
3) 鍊錶:常用來維護、管理那些需要頻繁產生、消除的遊戲物件,比如:消除類遊戲中需要消除的物件。
4) hashmap:底層是雜湊表,是鍵值對容器,用於處理key/value鍵值對;底層使用的是陣列+鍊錶的結構:mapmap = new hashmap<>();
5) 樹: 1.場景管理中的四叉樹;2.遊戲ui裡的選單一般是分級的,乙個主頁面可以衍生出很多的子頁面的時候,使用樹來管理這些選單是很合適的做法。
6) 圖: a*尋路演算法、dfs、bfs
遊戲也是採用了大量的演算法,都需要以資料結構為基石,就最簡單的功能尋路,滑鼠從a點到b點,這個角色就需要尋找一條從a點到b點的路,這條路還需要繞過所有的障礙物,甚至還需要找出最短的路徑,這就是最經典的圖論演算法,在圖論演算法種就使用了大量的資料結構。
在計算機領域有一句名言資料結構+演算法=程式,而資料結構本身就是演算法的基石,在近乎任何一本演算法教材,都花了大量的時間講解資料結構,學好資料結構和演算法可以讓我們在計算機這條道路上走的更遠。如果資料結構是因為它無處不在,學好資料結構是使我們快速成長的墊腳石。
在接下面的幾篇文章中,我會為大家更新資料結構中:陣列、棧、佇列、鍊錶、二分搜尋樹、堆、線段樹、trie、並查集、紅黑樹以及雜湊表等等...
的詳細講解,感興趣的同學記得關注我,我是牧小農,我喂自己帶鹽。
文章目錄
四、資料結構型別
python為什麼要學資料結構與演算法
如果 a b c 1000,且 a 2 b 2 c 2 a,b,c 為自然數 如何求出所有a b c可能的組合?import time start time time.time 注意是三重迴圈 for a in range 0,1001 for b in range 0,1001 for c in ...
為什麼要學習資料結構
目錄 1 什麼是資料結構?2 為什麼我們要學習資料結構?3 常見的資料他的結構有8種 資料結構是以某種特定的布局方式儲存資料的容器。這種布局方式決定了資料結構對於某些操作是高效的,而對於其他操作則是低效的。所以我們需要理解各種資料結構,才能處理實際問題時選取最合適的資料結構。資料是電腦科學當中最關鍵...
資料結構與演算法 01 為什麼要學資料結構與演算法
從今天起,我打算寫乙個系列,關於資料結構與演算法.這篇文章,算是乙個開篇之詞吧.資料結構與演算法,作業系統,計算機組成原理,還有計算機網路,這些內容在實際工作中你用到了多少?是不是除了面試的時候會問到,好像寫 的時候,也沒怎麼用,對吧?況且就算用到,我只要會呼叫 j a api 開發框架用的相當熟練...