亚洲AV免费看深爱成人|日韩av另类一级特黄片在线|中国免费一级黄片|国产av一二三区|亚洲有码AV在线|久久亚洲国产日韩欧美|成人免费AV网站|婷婷一区综合一区|亚洲AV无码导航|高级欧美成人网站

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

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

分享

熱門課程推薦

熱門資訊

請綁定手機號

x

同學您好!

您已成功報名0元試學活動,老師會在第一時間與您取得聯(lián)系,請保持電話暢通!
確定