發(fā)布時間:2024-04-08 19:49:10 瀏覽量:235次
在上一章的內(nèi)容中,我們一起學習了C#中的類、對象和方法。
而在這一課的內(nèi)容中,我們將學習C#和Unity之外的一個重要理論基礎。掌握了這個理論基礎之后,不管學習任何開發(fā)語言,都會如魚得水,輕松自在~
讓我們開始吧~
08 認識Unity3d的好基友C#-和數(shù)據(jù)結(jié)構(gòu)和算法
什么是數(shù)據(jù)結(jié)構(gòu)
在之前的內(nèi)容中,我們已經(jīng)接觸了C#的幾種基礎數(shù)據(jù)類型,那么什么是數(shù)據(jù)結(jié)構(gòu)呢?
維基百科之中對數(shù)據(jù)結(jié)構(gòu)有一個很簡單明了的定義:
a data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data
具體來說,數(shù)據(jù)結(jié)構(gòu)的作用是:
1.定義了一組數(shù)值的集合
2. 定義了數(shù)值之間的關系
3. 通過算法,定義了對數(shù)據(jù)的操作(查找、增加、刪除、修改)方式
這樣解釋起來相信大家都直接要懵逼了。
簡單來說,假如在開發(fā)中我們需要把一組數(shù)值用某種特定的方式存儲,那么我們就有了數(shù)據(jù)結(jié)構(gòu)。首先要有一組數(shù)值而不是一個數(shù)值,其次,這些數(shù)值之間存在某種關系。當然最后,我們還可以通過算法來找到或處理我們需要的數(shù)據(jù)。
在之前的學習中,其實我們已經(jīng)接觸了一種最簡單的數(shù)據(jù)結(jié)構(gòu),也就是數(shù)組。
實際上常用的數(shù)據(jù)結(jié)構(gòu)還有以下這些:

以上這八大數(shù)據(jù)結(jié)構(gòu)可謂是最常見的,也是最重要的。
因為數(shù)據(jù)結(jié)構(gòu)和算法屬于通用的內(nèi)容,這里我直接引用CSDN上一篇文章中關于數(shù)據(jù)結(jié)構(gòu)的內(nèi)容介紹(原文
https://blog.csdn.net/yeyazhishang/article/details/82353846):
每一種數(shù)據(jù)結(jié)構(gòu)都有著獨特的數(shù)據(jù)存儲方式,下面為大家介紹它們的結(jié)構(gòu)和優(yōu)缺點。
1、數(shù)組
數(shù)組可以在內(nèi)存中連續(xù)存儲多個元素,在內(nèi)存中的分配也是連續(xù)的。
數(shù)組中的元素通過數(shù)組下標進行訪問,數(shù)組下標從0開始。例如下面這段代碼就是將數(shù)組的第一個元素賦值為 1。
int[] data = new int[100];
data[0] = 1;
優(yōu)點:
1、按照索引查詢元素速度快
2、按照索引遍歷數(shù)組方便
缺點:
1、數(shù)組的大小固定后就無法擴容了
2、數(shù)組只能存儲一種類型的數(shù)據(jù)
3、添加,刪除的操作慢,因為要移動其他的元素。
適用場景:
頻繁查詢,對存儲空間要求不大,很少增加和刪除的情況。
2、棧
棧是一種特殊的線性表,僅能在線性表的一端操作,棧頂允許操作,棧底不允許操作。 棧的特點是:先進后出,或者說是后進先出,從棧頂放入元素的操作叫入棧,取出元素叫出棧。

棧的結(jié)構(gòu)就像一個箱子,越先放進去的東西越晚才能拿出來,
所以,棧常應用于實現(xiàn)遞歸功能方面的場景,例如斐波那契數(shù)列。
3、隊列
隊列與棧一樣,也是一種線性表,不同的是,隊列可以在一端添加元素,在另一端取出元素,也就是:先進先出。從一端放入元素的操作稱為入隊,取出元素為出隊:

使用場景:因為隊列先進先出的特點,在多線程阻塞隊列管理中非常適用。
4、鏈表
鏈表是物理存儲單元上非連續(xù)的、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表的指針地址實現(xiàn),每個元素包含兩個結(jié)點,一個是存儲元素的數(shù)據(jù)域 (內(nèi)存空間),另一個是指向下一個結(jié)點地址的指針域。根據(jù)指針的指向,鏈表能形成不同的結(jié)構(gòu),例如單鏈表,雙向鏈表,循環(huán)鏈表等。

鏈表的優(yōu)點:
鏈表是很常用的一種數(shù)據(jù)結(jié)構(gòu),不需要初始化容量,可以任意加減元素;
添加或者刪除元素時只需要改變前后兩個元素結(jié)點的指針域指向地址即可,所以添加,刪除很快;
缺點:
因為含有大量的指針域,占用空間較大;
查找元素需要遍歷鏈表來查找,非常耗時。
適用場景:
數(shù)據(jù)量較小,需要頻繁增加,刪除操作的場景
5、樹
樹是一種數(shù)據(jù)結(jié)構(gòu),它是由n(n>=1)個有限節(jié)點組成一個具有層次關系的集合。把它叫做 “樹” 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:
每個節(jié)點有零個或多個子節(jié)點;
沒有父節(jié)點的節(jié)點稱為根節(jié)點;
每一個非根節(jié)點有且只有一個父節(jié)點;
除了根節(jié)點外,每個子節(jié)點可以分為多個不相交的子樹;
在日常的應用中,我們討論和用的更多的是樹的其中一種結(jié)構(gòu),就是二叉樹。
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設計領域和數(shù)字藝術教育的重要性,歡迎點擊咨詢報名。
2. 手機游戲如何開發(fā)(如何制作傳奇手游,都需要準備些什么?)
?如何制作傳奇手游,都需要準備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時代在進步游戲在更新,更趨于方便化移動化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費、一鍵制作炫酷特效,適合新手小白??靵碓囋?!
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇?!短烀嬗肪哂卸嗑€劇情多結(jié)局,不限主線發(fā)展,高自由...
?三昧動漫對于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應并不會推出《巫師4》。因為《巫師》系列在策劃的時候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
6. 3D動畫軟件你知道幾個?3ds Max、Blender、Maya、Houdini大比拼
當提到3D動畫軟件或動畫工具時,指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術動畫的軟件程序。但是,在3D動畫軟件中還包含了其他類型的...
想讓你的3D打印模型更堅固?不妨嘗試一下Cura參數(shù)設置和設計技巧,讓你輕松掌握!
8. 虛幻引擎5節(jié)省存儲空間用這招!緩存的清理與設置
眾所周知,虛幻引擎5(下面簡稱UE5)特別占用存儲空間,僅一個版本安裝好的文件就有60G,這還不包括我們在使用時保存的工程文件和隨之產(chǎn)生的緩存文件。而...
9. Bigtime加密游戲經(jīng)濟體系揭秘,不同玩家角色的經(jīng)濟活動
Bigtime加密游戲經(jīng)濟模型分析,探討游戲經(jīng)濟特點,幫助玩家更全面了解這款GameFi產(chǎn)品。
10. 3D動漫建模全過程,不是一般人能學的會的,會的多不是人?
步驟01:面部,頸部,身體在一起這次我不準備設計圖片,我從雕刻進入。這一次,它將是一種純粹關注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
最新文章
同學您好!