激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

讓不懂編程的人愛(ài)上Unity3d游戲開發(fā)025-數(shù)據(jù)結(jié)構(gòu)和算法掃盲

發(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),就是二叉樹。

分享

熱門課程推薦

熱門資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定