英雄聯盟裏的數據結構
程序=數據結構+算法
不知各位有沒有玩過《英雄聯盟》或者《王者榮耀》?
這是“數據結構”的第一篇文章,主要想讓大家對數據結構有個初步的瞭解。所以本篇文章會結合《王者榮耀》、《英雄聯盟》這類遊戲簡單闡述數據結構。
數據結構相互之間存在一種或多種特定關係的數據元素的集合。
如果我們把在遊戲中控制英雄看作一個程序,那麼英雄就可以成為一個數據對象,比如《英雄聯盟》上單英雄武器大師賈克斯;同時,我需要地圖(部分內存空間)來存儲它,並且設計出適合賈克斯發育的上路地形(數據結構)。但是,上單除了賈克斯之外還有其他很多英雄,所以上路地形(數據結構)需要滿足的條件是:既要滿足賈克斯對上路的依賴需求,也要滿足其他上單英雄對上路的依賴需求。除此之外,我們還需要研究敵方英雄的技能能否剋制我方、我需要如何出裝、如何釋放技能等等,這些思路策略就等同於算法。
總結如下: 關係圖解如下:提問:如何去選擇數據結構去存儲數據?
回答:這裏還是以遊戲為例。英雄聯盟的地圖共有4種地形:上單、中單、下路、打野。這些地形都存儲在一個地圖上,每個地形都有對應位置的英雄,以上單英雄武器大師賈克斯(或王者榮耀花木蘭)為例,在遊戲中他雖然被標為上單英雄,但是你也可以用他們去下路,去中路或者打野。
同樣的道理,存儲數據也不一定只能用一種數據結構。現實就是這樣的情況比較少,選擇去上路的原因極大的是依靠上路的地形可以為自己建立一個很大的優勢,而去別路或許就天生具有劣勢。那麼我們為什麼不去選擇上路這種地形呢?
存儲一些數據我們可以使用單向鏈表存儲,也可用順序存儲,但是到底該選哪一種呢?這就需要根據具體的功能而定。比如如果想要查詢快的話(如購物的商品網頁),當然是優先選擇順序存儲,因為它速度更快,每一個都有索引,並且能根據索引立刻返回查詢到的數據。
相比遊戲英雄的例子,數據結構可能知識點會更多些,因為計算機中的數據元素種類很多,數量巨大,依賴關係十分複雜。
數據結構
數據結構分為邏輯結構和物理結構。
2.1 邏輯結構定義:數據對象中數據元素之間的相互關係。
邏輯圖象:集合線性結構樹形結構圖形結構如何去理解邏輯結構相信各位都畫過電路圖,電路圖其實就是電路的邏輯結構,我們畫電路圖就是為了減少無關影響,更加註重邏輯,還有一個例子就是質點。如圖:
物理結構顯而易見了,就是電路實際的樣子,如圖:
2.2 物理結構定義:數據的邏輯結構在計算機中的儲存形式.
抽象數據類型數據類型:一組性質相同的集合及定義在此集合上的一些操作的總稱。
通俗:有範圍的數據及操作規範。
抽象數據類型:指一個數學模型及定義在該模型上的一組操作。
通俗:可以自定義的數據類型。
描述抽象數據類型ADT 抽象數據類型名
Data
數據元素之間邏輯關係的定義
Operation
操作1
操作結果描述
操作2
......
操作n
endDAT
舉例:一個遊戲人物(如馬里奧)在初始時候只有跳、跑的操作,但是有的公司需要這個人物做打槍的動作,有的公司需要這個人物做趴下的動作,因此自定義的抽象數據類型就很重要!