在英雄聯盟地圖中尋找“資料結構的大門”

在英雄聯盟地圖中尋找“資料結構的大門”

英雄聯盟裡的資料結構

程式=資料結構+演算法

不知各位有沒有玩過《英雄聯盟》或者《王者榮耀》?

這是“資料結構”的第一篇文章,主要想讓大家對資料結構有個初步的瞭解。所以本篇文章會結合《王者榮耀》、《英雄聯盟》這類遊戲簡單闡述資料結構。

資料結構

相互之間存在一種或多種特定關係的資料元素的集合。

在英雄聯盟地圖中尋找“資料結構的大門”

如果我們把在遊戲中控制英雄看作一個程式,那麼英雄就可以成為一個數據物件,比如《英雄聯盟》上單英雄武器大師賈克斯;同時,我需要地圖(部分記憶體空間)來儲存它,並且設計出適合賈克斯發育的上路地形(資料結構)。但是,上單除了賈克斯之外還有其他很多英雄,所以上路地形(資料結構)需要滿足的條件是:既要滿足賈克斯對上路的依賴需求,也要滿足其他上單英雄對上路的依賴需求。除此之外,我們還需要研究敵方英雄的技能能否剋制我方、我需要如何出裝、如何釋放技能等等,這些思路策略就等同於演算法。

總結如下:
術語例子
資料元素(組成資料,有一定意義的基本單位,可以由很多資料項組成也被稱為記錄)某個具體英雄
資料結構(相互之間存在一種或多種特定關係的資料元素的集合。)地形
演算法(解決特定問題求解步驟的描述)策略
資料項(資料元素的屬性)英雄的屬性
資料(描述客觀事物的符號,是計算機可以操作的物件,能夠被識別並輸入給計算機處理)英雄
資料物件(性質相同的資料元素的集合,是資料的子集)上單英雄
關係圖解如下:
在英雄聯盟地圖中尋找“資料結構的大門”
在英雄聯盟地圖中尋找“資料結構的大門”

提問:如何去選擇資料結構去儲存資料?

回答:這裡還是以遊戲為例。英雄聯盟的地圖共有4種地形:上單、中單、下路、打野。這些地形都儲存在一個地圖上,每個地形都有對應位置的英雄,以上單英雄武器大師賈克斯(或王者榮耀花木蘭)為例,在遊戲中他雖然被標為上單英雄,但是你也可以用他們去下路,去中路或者打野。

同樣的道理,儲存資料也不一定只能用一種資料結構。現實就是這樣的情況比較少,選擇去上路的原因極大的是依靠上路的地形可以為自己建立一個很大的優勢,而去別路或許就天生具有劣勢。那麼我們為什麼不去選擇上路這種地形呢?

儲存一些資料我們可以使用單向連結串列儲存,也可用順序儲存,但是到底該選哪一種呢?這就需要根據具體的功能而定。比如如果想要查詢快的話(如購物的商品網頁),當然是優先選擇順序儲存,因為它速度更快,每一個都有索引,並且能根據索引立刻返回查詢到的資料。

相比遊戲英雄的例子,資料結構可能知識點會更多些,因為計算機中的資料元素種類很多,數量巨大,依賴關係十分複雜。

資料結構

資料結構分為邏輯結構和物理結構。

2.1 邏輯結構

定義:資料物件中資料元素之間的相互關係。

集合結構數學學過,不能重複,各個平等
線性結構一對一,糖葫蘆
樹形結構一對多,有層次,倒著的樹
圖形結構多對多,網狀結構
邏輯圖象:集合
在英雄聯盟地圖中尋找“資料結構的大門”
線性結構樹形結構
在英雄聯盟地圖中尋找“資料結構的大門”
圖形結構
在英雄聯盟地圖中尋找“資料結構的大門”
如何去理解邏輯結構

相信各位都畫過電路圖,電路圖其實就是電路的邏輯結構,我們畫電路圖就是為了減少無關影響,更加註重邏輯,還有一個例子就是質點。如圖:

在英雄聯盟地圖中尋找“資料結構的大門”

物理結構顯而易見了,就是電路實際的樣子,如圖:

在英雄聯盟地圖中尋找“資料結構的大門”
2.2 物理結構

定義:資料的邏輯結構在計算機中的儲存形式.

順序儲存結構連續(one by one)
鏈式儲存結構不連續,資料中包含指標,指向下一資料地址
抽象資料型別

資料型別:一組性質相同的集合及定義在此集合上的一些操作的總稱。

通俗:有範圍的資料及操作規範。

抽象資料型別:指一個數學模型及定義在該模型上的一組操作。

通俗:可以自定義的資料型別。

描述抽象資料型別
ADT 抽象資料型別名Data 資料元素之間邏輯關係的定義Operation 操作1 操作結果描述 操作2 ...... 操作nendDAT

舉例:一個遊戲人物(如馬里奧)在初始時候只有跳、跑的操作,但是有的公司需要這個人物做打槍的動作,有的公司需要這個人物做趴下的動作,因此自定義的抽象資料型別就很重要!

版權宣告:本文源自 網路, 於,由 楠木軒 整理釋出,共 1673 字。

轉載請註明: 在英雄聯盟地圖中尋找“資料結構的大門” - 楠木軒