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