發(fā)布時(shí)間:2024-04-08 19:49:10 瀏覽量:221次
在上一章的內(nèi)容中,我們一起學(xué)習(xí)了C#中的類、對(duì)象和方法。
而在這一課的內(nèi)容中,我們將學(xué)習(xí)C#和Unity之外的一個(gè)重要理論基礎(chǔ)。掌握了這個(gè)理論基礎(chǔ)之后,不管學(xué)習(xí)任何開發(fā)語(yǔ)言,都會(huì)如魚得水,輕松自在~
讓我們開始吧~
08 認(rèn)識(shí)Unity3d的好基友C#-和數(shù)據(jù)結(jié)構(gòu)和算法
什么是數(shù)據(jù)結(jié)構(gòu)
在之前的內(nèi)容中,我們已經(jīng)接觸了C#的幾種基礎(chǔ)數(shù)據(jù)類型,那么什么是數(shù)據(jù)結(jié)構(gòu)呢?
維基百科之中對(duì)數(shù)據(jù)結(jié)構(gòu)有一個(gè)很簡(jiǎn)單明了的定義:
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
具體來(lái)說(shuō),數(shù)據(jù)結(jié)構(gòu)的作用是:
1.定義了一組數(shù)值的集合
2. 定義了數(shù)值之間的關(guān)系
3. 通過(guò)算法,定義了對(duì)數(shù)據(jù)的操作(查找、增加、刪除、修改)方式
這樣解釋起來(lái)相信大家都直接要懵逼了。
簡(jiǎn)單來(lái)說(shuō),假如在開發(fā)中我們需要把一組數(shù)值用某種特定的方式存儲(chǔ),那么我們就有了數(shù)據(jù)結(jié)構(gòu)。首先要有一組數(shù)值而不是一個(gè)數(shù)值,其次,這些數(shù)值之間存在某種關(guān)系。當(dāng)然最后,我們還可以通過(guò)算法來(lái)找到或處理我們需要的數(shù)據(jù)。
在之前的學(xué)習(xí)中,其實(shí)我們已經(jīng)接觸了一種最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),也就是數(shù)組。
實(shí)際上常用的數(shù)據(jù)結(jié)構(gòu)還有以下這些:
以上這八大數(shù)據(jù)結(jié)構(gòu)可謂是最常見(jiàn)的,也是最重要的。
因?yàn)閿?shù)據(jù)結(jié)構(gòu)和算法屬于通用的內(nèi)容,這里我直接引用CSDN上一篇文章中關(guān)于數(shù)據(jù)結(jié)構(gòu)的內(nèi)容介紹(原文
https://blog.csdn.net/yeyazhishang/article/details/82353846):
每一種數(shù)據(jù)結(jié)構(gòu)都有著獨(dú)特的數(shù)據(jù)存儲(chǔ)方式,下面為大家介紹它們的結(jié)構(gòu)和優(yōu)缺點(diǎn)。
1、數(shù)組
數(shù)組可以在內(nèi)存中連續(xù)存儲(chǔ)多個(gè)元素,在內(nèi)存中的分配也是連續(xù)的。
數(shù)組中的元素通過(guò)數(shù)組下標(biāo)進(jìn)行訪問(wèn),數(shù)組下標(biāo)從0開始。例如下面這段代碼就是將數(shù)組的第一個(gè)元素賦值為 1。
int[] data = new int[100];
data[0] = 1;
優(yōu)點(diǎn):
1、按照索引查詢?cè)厮俣瓤?/p>
2、按照索引遍歷數(shù)組方便
缺點(diǎn):
1、數(shù)組的大小固定后就無(wú)法擴(kuò)容了
2、數(shù)組只能存儲(chǔ)一種類型的數(shù)據(jù)
3、添加,刪除的操作慢,因?yàn)橐苿?dòng)其他的元素。
適用場(chǎng)景:
頻繁查詢,對(duì)存儲(chǔ)空間要求不大,很少增加和刪除的情況。
2、棧
棧是一種特殊的線性表,僅能在線性表的一端操作,棧頂允許操作,棧底不允許操作。 棧的特點(diǎn)是:先進(jìn)后出,或者說(shuō)是后進(jìn)先出,從棧頂放入元素的操作叫入棧,取出元素叫出棧。
棧的結(jié)構(gòu)就像一個(gè)箱子,越先放進(jìn)去的東西越晚才能拿出來(lái),
所以,棧常應(yīng)用于實(shí)現(xiàn)遞歸功能方面的場(chǎng)景,例如斐波那契數(shù)列。
3、隊(duì)列
隊(duì)列與棧一樣,也是一種線性表,不同的是,隊(duì)列可以在一端添加元素,在另一端取出元素,也就是:先進(jìn)先出。從一端放入元素的操作稱為入隊(duì),取出元素為出隊(duì):
使用場(chǎng)景:因?yàn)殛?duì)列先進(jìn)先出的特點(diǎn),在多線程阻塞隊(duì)列管理中非常適用。
4、鏈表
鏈表是物理存儲(chǔ)單元上非連續(xù)的、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表的指針地址實(shí)現(xiàn),每個(gè)元素包含兩個(gè)結(jié)點(diǎn),一個(gè)是存儲(chǔ)元素的數(shù)據(jù)域 (內(nèi)存空間),另一個(gè)是指向下一個(gè)結(jié)點(diǎn)地址的指針域。根據(jù)指針的指向,鏈表能形成不同的結(jié)構(gòu),例如單鏈表,雙向鏈表,循環(huán)鏈表等。
鏈表的優(yōu)點(diǎn):
鏈表是很常用的一種數(shù)據(jù)結(jié)構(gòu),不需要初始化容量,可以任意加減元素;
添加或者刪除元素時(shí)只需要改變前后兩個(gè)元素結(jié)點(diǎn)的指針域指向地址即可,所以添加,刪除很快;
缺點(diǎn):
因?yàn)楹写罅康闹羔樣?,占用空間較大;
查找元素需要遍歷鏈表來(lái)查找,非常耗時(shí)。
適用場(chǎng)景:
數(shù)據(jù)量較小,需要頻繁增加,刪除操作的場(chǎng)景
5、樹
樹是一種數(shù)據(jù)結(jié)構(gòu),它是由n(n>=1)個(gè)有限節(jié)點(diǎn)組成一個(gè)具有層次關(guān)系的集合。把它叫做 “樹” 是因?yàn)樗雌饋?lái)像一棵倒掛的樹,也就是說(shuō)它是根朝上,而葉朝下的。它具有以下的特點(diǎn):
每個(gè)節(jié)點(diǎn)有零個(gè)或多個(gè)子節(jié)點(diǎn);
沒(méi)有父節(jié)點(diǎn)的節(jié)點(diǎn)稱為根節(jié)點(diǎn);
每一個(gè)非根節(jié)點(diǎn)有且只有一個(gè)父節(jié)點(diǎn);
除了根節(jié)點(diǎn)外,每個(gè)子節(jié)點(diǎn)可以分為多個(gè)不相交的子樹;
在日常的應(yīng)用中,我們討論和用的更多的是樹的其中一種結(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è)計(jì)領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點(diǎn)擊咨詢報(bào)名。
2. 手機(jī)游戲如何開發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說(shuō)明時(shí)代在進(jìn)步游戲在更新,更趨于方便化移動(dòng)化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費(fèi)、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費(fèi)、一鍵制作炫酷特效,適合新手小白??靵?lái)試試!
4. Steam值得入手的武俠游戲盤點(diǎn),各具特色的快意江湖
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個(gè)抉定都將觸發(fā)更多愛(ài)恨糾葛的精彩奇遇?!短烀嬗肪哂卸嗑€劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動(dòng)
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點(diǎn),幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動(dòng)畫軟件你知道幾個(gè)?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動(dòng)畫軟件或動(dòng)畫工具時(shí),指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動(dòng)畫的軟件程序。但是,在3D動(dòng)畫軟件中還包含了其他類型的...
7. 3D動(dòng)漫建模全過(guò)程,不是一般人能學(xué)的會(huì)的,會(huì)的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計(jì)圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
8. 如何自己開發(fā)一款游戲(游戲開發(fā)入門必看:五大獨(dú)立游戲開發(fā)技巧)
?游戲開發(fā)入門必看:五大獨(dú)立游戲開發(fā)技巧無(wú)論您是剛剛起步開發(fā)自己的第一款游戲,還是已經(jīng)制作了幾款游戲,本篇文章中的5大獨(dú)立游戲開發(fā)技巧都可以幫助您更好地設(shè)計(jì)下一款游戲。無(wú)論你對(duì)游戲有著什么樣的概念,都
?三昧動(dòng)漫對(duì)于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會(huì)推出《巫師4》。因?yàn)椤段讕煛废盗性诓邉澋臅r(shí)候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
10. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅(jiān)固
想讓你的3D打印模型更堅(jiān)固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計(jì)技巧,讓你輕松掌握!
最新文章
同學(xué)您好!