《大話數據結構(C實現)》
《大話數據結構(C實現)》 |
版本 |
作者 |
參與者 |
完成日期 |
備註 |
YanlzStruct_CBase_V01_1.0 |
嚴立鑽 |
|
2020.02.09 |
|
|
|
|
|
|
##《大話數據結構(C實現)》發佈說明:
++++“大話數據結構(C實現)”:是對“軟件架構設計”的綜合探索;【程序=數據結構+算法】:數據結構是程序設計的重要技術;數據結構在某種程度上和設計模式類似,都是前輩的武功套路,不同的是,設計模式是近幾十年的卓越程序員的智慧結晶,而數據結構是幾百上千年的無數科學家、數學家的智慧沉澱,更具有深厚的背景;數據結構是相互之間存在一種或多種特定關係的數據元素的集合;數據結構是一門研究非數值計算的程序設計問題中的操作對象,以及它們之間的關係和操作等相關問題的學科;
++++“大話數據結構(C實現)”:定位在一個科普類知識,瞭解“數據結構”以及相關算法研究,以及軟件架構設計和框架編程!
@@提示:有些博客可能只是開了頭,如果感興趣的同學,可以“點贊”或“評論區留言”,只要關注的同學多了,那就會繼續完善喲!(“++==”,表示沒有寫完的,如果關注度不高就不完善了;“++ok++”,表示此篇博客已經完成,是階段性完整的!)
$$$$博客溯源:
++++VR雲遊戲=Unity+SteamVR+雲技術+5G+AI;(說明:AI人工智能不是我們的主要研究技術,只是瞭解一下,領略一下有風的感覺!但是,VR是我們的研究重點)
++++【軟件架構設計】分類:https://blog.csdn.net/vrunsoftyanlz/category_9708791.html
++++【大話數據結構(C實現)】:https://blog.csdn.net/VRunSoftYanlz/article/details/104242455
++++【大話數據結構(C#實現)】:https://blog.csdn.net/VRunSoftYanlz/article/details/104243017
##《大話數據結構(C實現)》目錄
#第一篇:數據結構基礎篇
#第二篇:進階算法篇
#第三篇:數據結構剖析篇
#第四篇:數據結構拓展篇
#第五篇:立鑽哥哥帶您數據結構實戰
#第一篇:數據結構基礎篇
#第一篇:數據結構基礎篇 |
#第一篇:數據結構基礎篇
++++立鑽哥哥:數據結構是相互之間存在一種或多種特定關係的數據元素的集合;數據結構是計算機存儲、組織數據的方式;通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率;數據結構往往同高效的檢索算法和索引技術有關;
++++數據結構(Data Structure)是帶有結構特性的數據元素的集合,它研究的數據的邏輯結構和數據的物理結構以及它們之間的相互關係,並對這種結構定義相適應的運算,設計出相應的算法,並確保經過這些運算以後所得到的新結構仍保持原來的結構類型;
++++數據結構的研究內容是構造複雜軟件系統的基礎,它的核心技術是分解與抽象;通過分解可以劃分出數據的3個層次;再通過抽象,捨棄數據元素的具體內容,就得到邏輯結構;
++數據的邏輯結構
++++立鑽哥哥:數據的邏輯結構指反映數據元素之間的邏輯關係的數據結構,其中的邏輯關係是指數據元素之間的前後間關係,而與他們在計算機中的存儲位置無關;邏輯結構包括:集合、線性結構、樹形結構、圖形結構;
++++[集合]:數據結構中的元素之間除了“同屬一個集合”的相互關係外,別無其他關係;
++++[線性結構]:數據結構中的元素存在一對一的相互關係;
++++[樹形結構]:數據結構中的元素存在一對多的相互關係;
++++[圖形結構]:數據結構中的元素存在多對多的相互關係;
++常用的數據結構
++++立鑽哥哥:在計算機科學的發展過程中,數據結構也隨之發展;程序設計中常用的數據結構包括:數組(Array)、棧(Stack)、隊列(Queue)、鏈表(Linked List)、樹(Tree)、圖(Graph)、堆(Heap)、散列表(Hash)等;
++++[數組(Array)]:數組是一種聚合數據類型,它是將具有相同類型的若干變量有序地組織在一起的集合;數組可以說是最基本的數據結構,在各種編程語言中都有對應;一個數組可以分解爲多個數組元素,按照數據元素的類型,數組可以分爲整型數組、字符型數組、浮點型數組、指針數組和結構數組等;數組還可以有一維、二維以及多維等表現形式;
++++[棧(Stack)]:棧是一種特殊的線性表,它只能在一個表的一個固定端進行數據結點的插入和刪除操作;棧按照後進先出的原則來存儲數據,也就是說,先插入的數據將被壓入棧底,最後插入的數據在棧頂,讀出數據時,從棧頂開始逐個讀出;棧在彙編語言程序中,經常用於重要數據的現場保護;棧中沒有數據時,稱爲空棧;
++++[隊列(Queue)]:隊列和棧類似,也是一種特殊的線性表;和棧不同的是,隊列只允許在表的一端進行插入操作,而在另一端進行刪除操作;一般來說,進行插入操作的一端稱爲隊尾,進行刪除操作的一端稱爲隊頭;隊列中沒有元素時,稱爲空隊列;
++++[鏈表(Linked List)]:鏈表是一種數據元素按照鏈式存儲結構進行存儲的數據結構,這種存儲結構具有在物理上存在非連續的特點;鏈表由一系列數據結點構成,每個數據結點包括數據域和指針域兩部分;其中,指針域保存了數據結構中下一個元素存放的地址;鏈表結構中數據元素的邏輯順序時通過鏈表中的指針鏈接次序來實現的;
++++[樹(Tree)]:樹是典型的非線性結構,它是包括,2個結點的有窮集合K;在樹結構中,有且僅有一個根結點,該結點沒有前驅結點;在樹結構中的其他結點都有且僅有一個前驅結點,而且可以有兩個後繼結點,m>=0;
++++[圖(Graph)]:圖是另一種非線性數據結構;在圖結構中,數據結點一般稱爲頂點,而邊是頂點的有序偶對;如果兩個頂點之間存在一條邊,那麼就表示這兩個頂點具有相鄰關係;
++++[堆(Heap)]:堆是一種特殊的樹形數據結構,一般討論的堆都是二叉堆;堆的特點是根結點的值是所有結點中最小的或者最大的,並且根結點的兩個子樹也是一個堆結構;
++++[散列表(Hash)]:散列表源自於散列函數(Hash Function),其思想是如果在結構中存在關鍵字和T相等的記錄,那麼必定在F(T)的存儲位置可以找到該記錄,這樣就可以不用進行比較操作而直接取得所查記錄;
#第二篇:進階算法篇
#第二篇:進階算法篇 |
#第二篇:進階算法篇
++++立鑽哥哥:算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表着用系統的方法描述解決問題的策略機制;一個算法的優劣可以用空間複雜度與時間複雜度來衡量;算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和(可能爲空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態;一個狀態到另一個狀態的轉移不一定是確定的;隨機化算法在內的一些算法,包含了一些隨機輸入;
++++一個算法應該具有5個重要特徵:有窮性、確切性、輸入項、輸出項、可行性等;
++++[有窮性(Finiteness)]:算法的有窮性是指算法必須能在執行有限個步驟之後終止;
++++[確切性(Definiteness)]:算法的每一步驟必須有確切的定義;
++++[輸入項(Input)]:一個算法由0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定出了初始條件;
++++[輸出項(Output)]:一個算法有一個或多個輸出,以反映對輸入數據加工後的結果;沒有輸出的算法是毫無意義的;
++++[可行性(Effectiveness)]:算法中執行的任何計算步驟都是可以被分解爲基本的可執行的操作步驟,即每個計算步驟都可以在有限時間內完成(也稱之爲有效性);
++算法
++++立鑽哥哥:算法(Algorithm)是程序設計的靈魂,它是用系統的方法描述解決問題的策略機制;一個正確的算法滿足的性質:輸入、輸出、確定性、有限性等;
++++[輸入]:有零個或多個輸入;
++++[輸出]:至少有一個輸出;
++++[確定性]:組成算法的每條指令清晰,無歧義;
++++[有限性]:一個算法在執行有限步驟後必須結束,即計算步驟是有限的;
++++描述算法可以由多種方式,如自然語言、流程圖、僞代碼、程序設計語言;算法設計就是針對具體的問題,設計出良好的算法,使計算機能夠解決該問題;同一個問題可以採用不同的算法實現,不同的算法可能時間、空間並不相同,一個算法的優劣可以用空間複雜度與時間複雜度來衡量;
++++算法設計中經常採用的排序算法、查找算法、迭代算法、遞推算法、遞歸算法、枚舉算法、貪心算法、回溯算法、矩陣算法等;
++數據
++++立鑽哥哥:數據是描述客觀事物的符號,是計算機中可以操作的對象,是能被計算機識別,並輸入給計算機處理的符號集合;數據不僅僅包括整型、實型等數值類型,還包括字符及聲音、圖像、視頻等非數值類型;
++數據元素
++++立鑽哥哥:數據元素是組成數據的、有一定意義的基本單位,在計算機中通常作爲整體處理;也被稱爲記錄;
++數據項
++++立鑽哥哥:一個數據元素可以由若干個數據項組成;數據項是數據不可分割的最小單位;
++數據對象
++++立鑽哥哥:數據對象是性質相同的數據元素的集合,是數據的子集;
++數據結構
++++立鑽哥哥:數據結構是相互之間存在一種或多種特定關係的數據元素的集合;不同數據元素之間不是獨立的,而是存在特定的關係,我們將這些關係稱爲結構;
++邏輯結構
++++立鑽哥哥:邏輯結構是指數據對象中數據元素之間的相互關係;邏輯結構分爲:集合結構、線性結構、樹形結構、圖形結構等;
++物理結構
++++立鑽哥哥:物理結構是指數據的邏輯結構在計算機中的存儲形式;數據元素的存儲結構形式有:順序存儲、鏈式存儲等;
++++[順序存儲結構]:是把數據元素存放在地址連續的存儲單元裏,其數據間的邏輯關係和物理關係是一致的;
++++[鏈式存儲結構]:是把數據元素存放在任意的存儲單元裏,這組存儲單元可以是連續的,也可以是不連續的;
++數據類型
++++立鑽哥哥:數據類型是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱;
++抽象數據類型
++++立鑽哥哥:抽象數據類型(Abstract Data Type, ADT)是指一個數學模型及定義在該模型上的一組操作;抽象數據類型體現了程序設計中問題分解、抽象和信息隱藏的特性;
++++[抽象]:是指抽取出事物具有的普遍性的本質;“抽象”的意義在於數據類型的數學抽象特性;
++算法(Algorithm)
++++立鑽哥哥:算法(Algorithm)是解決特定問題求解步驟的描述,在計算機中表現爲指令的有限序列,並且每條指令表示一個或多個操作;
++++算法具有五個基本特性:輸入、輸出、有窮性、確定性、可行性等;
++++[輸入輸出]:算法具有零個或多個輸入;算法至少有一個或多個輸出;
++++[有窮性]:指算法在執行有限的步驟之後,自動結束而不會出現無限循環,並且每一個步驟在可接受的時間內完成;
++++[確定性]:算法的每一步驟都具有確定的含義,不會出現二義性;
++++[可行性]:算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成;
++算法設計的要求
++++立鑽哥哥:好的算法應該具有:正確性、可讀性、健壯性、高效率和低存儲量的特徵;
++++[正確性]:算法的正確性是指算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需求、能夠得到問題的正確答案;
++++[可讀性]:算法設計的另一目的是爲了便於閱讀、理解和交流;
++++[健壯性]:當輸入數據不合法時,算法也能做出相關處理,而不是產生異常或莫名其妙的結果;
++++[時間效率高和存儲量低]:設計算法應該儘量滿足時間效率高和存儲量低的需求;
++算法時間複雜度
++++立鑽哥哥:在進行算法分析時,語句總的執行次數T(n)是關於問題規模n的函數,進而分析T(n)隨n的變化情況並確定T(n)的數量級;算法的時間複雜度,也就是算法的時間量度,記住:T(n)=O(f(n));它表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸進時間複雜度,簡稱爲時間複雜度;其中f(n)是問題規模n的某個函數;
++推導大O階:++++1、用常數1取代運行時間中的所有加法常數;++++2、在修改後的運行次數函數中,只保留最高階項;++++3、如果最高階項存在且不是1,則去除與這個項相乘的常數;得到的結果就是大O階;
|
++常用的時間複雜度所耗費的時間從小到大依次如下:++++O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n);
|
++++[O(1)]:常數階;
++++[O(n)]:線性階;
++++[O(n^2)]:平方階;
++++[O(logn)]:對數階;
&&Tips:對算法的學習,立鑽哥哥已經整理出幾篇獨立博文了,有興趣的可以查閱以下鏈接:
++++【C/C++函數與算法】:https://blog.csdn.net/VRunSoftYanlz/article/details/104062527
++++【Unity小遊戲算法分析】:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++【設計模式(精華篇)】:https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++【軟件架構設計】分類:https://blog.csdn.net/vrunsoftyanlz/category_9708791.html
++++【C++C鑄就生存利器】分類:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分類:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立鑽哥哥CSDN空間】:https://blog.csdn.net/VRunSoftYanlz/
#第三篇:數據結構剖析篇
#第三篇:數據結構剖析篇 |
#第三篇:數據結構剖析篇
++++立鑽哥哥:數據的邏輯結構指反映數據元素之間的邏輯關係的數據結構,其中的邏輯關係是指數據元素之間的前後間關係,而與他們在計算機中的存儲位置無關;邏輯結構包括:集合、線性結構、樹形結構、圖形結構等;
++++C1、基礎篇
++++C2、進階算法篇
++++C3、線性表
++++C4、棧與隊列
++++C5、串
++++C6、樹
++++C7、圖
++C1、基礎篇
++C1、基礎篇 |
++C1、基礎篇
++++立鑽哥哥:在計算機科學的發展過程中,數據結構也隨之發展;程序設計中常用的數據結構包括:數組(Array)、棧(Stack)、隊列(Queue)、鏈表(Linked List)、樹(Tree)、圖(Graph)、堆(Heap)、散列表(Hash)等;
++C2、進階算法篇
++C2、進階算法篇 |
++C2、進階算法篇
++++立鑽哥哥:算法(Algorithm)是程序設計的靈魂,它是用系統的方法描述解決問題的策略機制;一個正確的算法滿足的性質:輸入、輸出、確定性、有限性等;
++++[輸入]:有零個或多個輸入;
++++[輸出]:至少有一個輸出;
++++[確定性]:組成算法的每條指令清晰,無歧義;
++++[有限性]:一個算法在執行有限步驟後必須結束,即計算步驟是有限的;
++++描述算法可以由多種方式,如自然語言、流程圖、僞代碼、程序設計語言;算法設計就是針對具體的問題,設計出良好的算法,使計算機能夠解決該問題;同一個問題可以採用不同的算法實現,不同的算法可能時間、空間並不相同,一個算法的優劣可以用空間複雜度與時間複雜度來衡量;
++++算法設計中經常採用的排序算法、查找算法、迭代算法、遞推算法、遞歸算法、枚舉算法、貪心算法、回溯算法、矩陣算法等;
++排序算法
++排序算法 |
++排序算法
++++立鑽哥哥:排序算法是程序設計中最爲常用的算法;常用的排序算法包括:插入類排序算法、交換類排序算法、選擇類排序算法、歸併排序算法和基數排序算法等;
++插入排序
++++立鑽哥哥:插入排序的算法思想:將待排序元素分爲已排序子集和未排序子集,依次從未排序子集中的一個元素插入到已排序子集中,使已排序子集仍然有序;重複執行以上過程,直到所有元素都有序爲止;
++++直接插入排序
++++直接插入排序 |
++直接插入排序
++++立鑽哥哥:直接插入排序是一種最簡單的插入排序算法;直接插入算法實現簡單,適用於待排序元素較少且基本有序的情況;在元素基本有序時,需要比較的次數和移動的次數很少,因此在這種情況下使用直接插入排序最佳;
++++[穩定性與複雜度]:直接插入排序屬於穩定的排序方法,直接插入排序算法的時間複雜度爲O(n.2),空間複雜度爲O(1);
//立鑽哥哥:直接插入排序算法 #include <stdio.h>
void PrintMyArray(int a[], int n);
void main(){ int a[] = { 27, 44, 18, 77, 23, 89, 100}; int t, i, j, n;
n = sizeof(a)/sizeof(a[0]);
for(i=1; i<n; i++){ t = a[i]; for(j=i-1; j>=0&&t<a[j]; j--){ a[j+1] = a[j]; } a[j+1] = t;
PrintMyArray(a, n); } }
void PrintMyArray(int a[], int n) { ... ... } |
++++折半插入排序
++++折半插入排序 |
++折半插入排序
++++立鑽哥哥:折半插入排序算法是直接插入排序的改進;它的主要改進在於,在已經有序的集合中使用折半查找法確定帶排序元素的插入位置;在找到要插入的位置後,將待排序元素插入到相應的位置;
++++[折半插入排序與直接插入排序的區別]:直接插入排序,從右到左按順序查找插入的位置;折半插入排序,折半查找算法在有序集合中查找插入的位置;
++++[主要用途]:折半插入排序算法也直接插入排序一樣,通常也用於待排序元素的個數較少的情況;如果待排序算法基本有序,則最好採用直接插入排序算法;
++++[穩定性與複雜度]:折半插入排序也是一種穩定的排序算法;雖然折半插入排序在查找插入的位置時改進了查找方法,減少了比較次數,比較次數由O(n)變爲O(nlog2n);但是移動元素的時間複雜度仍然沒有改變,因此折半查找排序算法的整體時間複雜度仍然爲O(n^2),它的空間複雜度爲O(1);
//立鑽哥哥:折半插入排序算法 #include <stdio.h>
void PrintMyArray(int a[], int n);
void main(){ int a[] = { 56, 77, 81, 98, 28, 53, 11 }; int t, i, j, low, high, mid, n;
n = sizeof(a)/sizeof(a[0]); for(i=1; i<n; i++){ t = a[i]; for(low=0, high=i-1; high>=low; ){ mid = (low+high)/2; if(t < a[mid]){ high = mid-1; }else{ low = mid+1; } }
for(j=i-1; j>=low; j--){ a[j+1] = a[j]; }
a[low] = t; PrintMyArray(a, n); } }
void PrintMyArray(int a[], int n){ ... ... } |
++++希爾排序
++++希爾排序 |
++希爾排序
++++立鑽哥哥:希爾排序也屬於插入類排序算法;希爾排序通過縮小增量,將待排序元素劃分爲若干個子序列,分別對各個子序列按照直接插入排序算法進行排序;當增量爲1時,待排序元素構成一個子序列,對該序列排序完畢後希爾排序算法結束;
++++[與直接插入排序、折半插入排序的區別]:直接插入排序、折半插入排序;待排序元素構成一個子序列;希爾排序:待排序元素劃分爲若干個子序列,需要分別對每個子序列進行排序;
++++[主要用途]:希爾排序算法可以使值較小的元素很快向前移動,當待排序元素基本有序時,再使用直接插入排序處理,時間效率會高很多;希爾排序主要用在數據量在5000以下且速度要求並不是很重要的場合;
++++[穩定性和複雜度]:希爾排序是一種不穩定的排序算法;由於增量的選擇是隨機的,因此分析希爾排序算法的時間複雜度就變成一件非常複雜的事情;但是經過研究發現,當增量序列delta[k]=2^(t-k+1)時,希爾排序的時間複雜度爲O(n^(3/2));希爾排序的空間複雜度爲O(1);
//立鑽哥哥:希爾排序算法 #include <stdio.h>
void MyShellSort(int a[], int length, int delta[], int m); void MyShellInsert(int a[], int length, int c); void MyDispArray(int a[], int length);
void main(){ int a[] = { 43, 56, 78, 92, 43, 21, 31 }; int delta[] = { 4, 2, 1 }, m=3, length=sizeof(a)/sizeof(a[0]);
MyShellSort(a, length, delta, m);
MyDispArray(a, length); }
//對數組中的元素進行一趟希爾排序,c是增量 void MyShellInsert(int a[], int length, int c){ int i, j, t;
//將距離爲c的元素作爲一個子序列進行排序 for(i=c; i<length; i++){ //如果後者小於前者,則需要移動元素 if(a[i] < a[i-c]){ t = a[i]; for(j = i-c; j>=0 && t<a[j]; j=j-c){ a[j+c] = a[j]; }
//依次將元素插入到正確的位置 a[j+c] = t; } } }
//希爾排序,每次調用算法ShellInsert,delta是存放增量的數組 void MyShellSort(int a[], int length, int delta[], int m){ int i;
//進行m次希爾插入排序 for(i=0; i<m; i++){ MyShellInsert(a, length, delta[i]); MyDispArray(a, length); } }
//輸出數組a中的元素 void MyDispArray(int a[], int length){ } |
++交換排序
++交換排序 |
++交換排序
++++立鑽哥哥:交換排序的算法思想:通過交換逆序的元素實現交換排序;交換排序主要有兩種:冒泡排序和快速排序;
++++冒泡排序
++++冒泡排序 |
++冒泡排序
++++立鑽哥哥:冒泡排序是一種簡單的交換類排序算法,它是通過交換相鄰的兩個數據元素,逐步將待排序序列變成有序序列;它的基本算法思想描述:假設待排序元素有n個,從第1個元素開始,依次交換相鄰的兩個逆序元素,直到最後一個元素爲止;當第1趟排序結束,機會將最大的元素移動到序列的末尾;然後按照以上方法進行第2趟排序,次大的元素將會被移動到序列的倒數第2個位置;依次類推,經過n-1趟排序後,整個元素序列就成了有序的序列;每趟排序過程中,值小的元素向前移動,值大的元素向後移動,就像氣泡一樣向上升,因此將這種排序方法稱爲冒泡排序;
++++[主要用途]:冒泡算法實現簡單,適用於待排序元素較少且對時間要求不高的場合;
++++[穩定性與複雜度]:冒泡排序是一種穩定的排序方法;假設待排序元素爲n個,則需要進行n-1趟排序,每趟排序需要進行n-i次比較,其中i=1,2,...,n-1;因此,冒泡排序的比較次數爲E(...)=(n(n-1))/2,移動元素的次數爲(3n(n-1)/2),它的時間複雜度爲O(n^2),空間複雜度爲O(1);
//立鑽哥哥:冒泡排序算法 #include <stdio.h>
void MyPrintArray(int a[], int n);
void main(){ int a[] = { 45, 78, 92, 44, 52, 67, 98, 12 }; int i, j, t, n=sizeof(a)/sizeof(a[0]);
for(i=1; i<n; i++){ for(j=0; j<n-i; j++){ if(a[j] > a[j+1]){ t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } MyPrintArray(a, n); } }
void MyPrintArray(int a[], int n){ ... ... } |
++++快速排序
++++快速排序 |
++快速排序
++++立鑽哥哥:快速排序是冒泡排序算法的改進,也屬於交換類排序算法;快速排序正是將每個部分都以樞軸元素爲中心不斷地劃分元素序列,直到每個序列中的元素只有一個,不能繼續劃分爲止;
++++快速排序算法可以通過遞歸調用實現,排序的過程其實就是不斷地對元素序列進行劃分,直到每一個部分不能劃分時即完成快速排序;
++++[主要用途]:快速算法是冒泡排序算法的改進,實現比較算法,它主要用在需要對大量數據進行排序的情況,它的時間效率要遠高於冒泡排序,在數據量特別大的情況下特別明顯;
++++[穩定性與複雜度]:快速排序是一種不穩定的排序算法;在最好的情況下,每趟排序都是將元素序列正好劃分爲兩個等長的子序列;這樣,快速排序子序列的劃分過程就是創建完全二叉樹的過程,劃分的次數等於樹的深度即log2n,因此,最好的情況下,時間複雜度爲O(n^2);在最壞的情況下,待排序元素序列已經是有序的,則時間的花費主要集中在元素的比較次數上;每一趟需要比較n-1次,第二趟需要比較n-2次,依次類推,共需要比較n(n-1)/2次,因此時間複雜度爲O(n^2);在平均情況下,快速排序的時間複雜度爲O(nlog2n);快速排序的空間複雜度爲O(log2n);
//立鑽哥哥:快速排序算法 #include <stdio.h>
void MyDispArray(int a[], int n); void MyDispArray2(int a[], int n, int pivot, int count); void MyQSort(int a[], int n, int low, int high); void MyQuickSort(int a[], int n); void MyPartition(int a[], int low, int high);
//利用快速排序算法對數組a中的元素排序 void MyQSort(int a[], int n, int low, int high){ int pivot; static count = 1;
//如果元素序列的長度大於1 if(low < high){ //將待排序序列a[low,high]劃分爲兩部分 pivot = MyPartition(a, low, high); count++;
//對左邊的子表進行遞歸排序,pivot是樞軸位置 MyQSort(a, n, low, pivot-1);
//對右邊的子表進行遞歸排序 MyQSort(a, n, pivot+1, high); } }
//對數組a進行快速排序 void MyQuickSort(int a[], int n){ MyQSort(a, n, 0, n-1); }
//對數組a[low, high]的元素進行一趟排序,使樞軸前面的元素小於樞軸元素,樞軸後面的元素大於等於樞軸元素,並返回樞軸位置 int MyPartition(int a[], int low, int high){ int t, pivot;
//將表的第一個元素作爲樞軸元素 pivot = a[low]; t = a[low];
//立鑽哥哥:從表的兩端交替地向中間掃描 while(low < high){ //從表的末端向前掃描 while(low<high && a[high]>=pivot){ high--; }
//將當前high指向的元素保存在low位置 if(low < high){ a[low] = a[high]; low++; }
//從表的始端向後掃描 while(){ low++; }
//將當前low指向的元素保存在high位置 if(low < high){ a[high] = a[low]; high--; }
//將樞軸元素保存在low的位置 a[low] = t; }
//返回樞軸所在位置 return low; }
void MyDispArray2(int a[], int n, int pivot, int count){ ... ... }
void MyDispArray(int a[], int n){ ... ... }
void main(){ int a[] = { 33, 66, 77, 88, 43, 23, 14, 58 }; int n = sizeof(a)/sizeof(a[0]); MyDispArray(a, n);
MyQuickSort(a, n); MyDispArray(a, n); } ++++立鑽哥哥:快速算法是冒泡排序算法的改進,實現比較複雜,它主要用在需要對大量數據進行排序的情況,它的時間效率要遠高於冒泡排序,在數據量特別大的情況下特別明顯; |
++選擇排序
++選擇排序 |
++選擇排序
++++立鑽哥哥:選擇排序的算法思想:從待排序的元素序列中選擇最小(最大)的元素,將其放在已排序元素序列的最前(最末),其餘的元素構成新的待排序元素序列,然後從待排序元素序列中選擇最小(最大)的元素,將其放在已排序元素序列的最前(最末);依次類推,直到待排序元素序列中沒有待排序的元素;選擇排序主要有兩種:簡單選擇排序和堆排序;
++++簡單選擇排序
++++簡單選擇排序 |
++簡單選擇排序
++++立鑽哥哥:簡單選擇排序是一種簡單的選擇類排序算法,它是通過依次找到待排序元素序列中最小的數據元素,並將其放在序列的最前面,從而使待排序元素序列變爲有序序列;它的基本算法思想描述:假設待排序的元素序列有n個,在第一趟排序過程中,從n個元素序列中選擇最小的元素,並將其放在元素序列的最前面即第一個位置;在第二趟排序過程中,從剩餘的n-1個元素中,選擇最小的元素,將其放在第二個位置;依次類推,直到沒有待比較的元素,簡單選擇排序算法結束;
++++[主要用途]:簡單選擇排序算法實現簡單,適用於待排序元素較少且對時間要求不高的場合;
++++[穩定性與複雜度]:簡單選擇是一種不穩定的排序算法;在最好的情況下,待排序元素序列按照非遞減排列,則不需要移動元素;在最壞的情況下,待排序元素按照非遞增排列,則在每一趟排序都需要移動元素,移動元素的次數爲3(n-1);在任何情況下,簡單選擇排序算法都需要進行n(n-1)/2次的比較;簡單選擇排序算法的時間複雜度是O(n^2);簡單選擇排序的空間複雜度是O(1);
//立鑽哥哥:簡單選擇排序算法 #include <stdio.h>
void MySelectSort(int a[], int n); void MyDispArray(int a[], int n);
void main(){ int a[] = { 34, 56, 78, 92, 35, 68, 12 }; int n = sizeof(a)/sizeof(a[0]);
MySelectSort(a, n); MyDispArray(a, n); }
//簡單選擇排序 void MySelectSort(int a[], int n){ int i, j, k, t;
//將第i個元素與第i+1...n個元素比較,將最小的元素放在第i個位置 for(i=0; i<n-1; i++){ j = i;
//最小的元素的序號爲j for(k=i+1; k<n; k++){ if(a[k] < a[j]){ j = k; }
//如果序號i不等於j,則需要將序號i和序號j的元素交換 if(j != i){ t = a[i]; a[i] = a[j]; a[j] = t; }
MyDispArray(a, n); } } }
//輸出數組中的元素 void MyDispArray(int a[], int n){ ... ... } |
++C3、線性表
++C3、線性表 |
++C3、線性表
++++立鑽哥哥:線性表(List)是零個或多個數據元素的有序序列;線性表元素的個數n(n>=0)定義爲線性表的長度,當n=0時,稱爲空表;在較複雜的線性表中,一個數據元素可以由若干個數據項組成;
++++C3.1、順序存儲結構
++++C3.2、鏈式存儲結構
++C3.1、順序存儲結構
++C3.1、順序存儲結構 |
++C3.1、順序存儲結構
++++立鑽哥哥:線性表(List)的數據對象集合爲{ a1, a2, ... ..., an},每個元素的類型均爲DataType;其中,除第一個元素a1外,每一個元素有且只有一個直接前驅元素,除了最後一個元素an外,每一個元素有且只有一個直接後繼元素;數據元素之間的關係是一對一的關係;
++++順序存儲結構的優點:無須爲表示表中元素之間的邏輯關係而增加額外的存儲空間;可以快速地存取表中任一位置的元素;
++++順序存儲結構的缺點:插入和刪除操作需要移動大量元素;當線性表長度變化較大時,難以確定存儲空間的容量;造成存儲空間的“碎片”;
++++[InitList(*L)]:初始化操作,建立一個空的線性表L;
++++[ListEmpty(L)]:若線性表爲空,返回true,否則返回false;
++++[ClearList(*L)]:將線性表清空;
++++[GetElem(L, i, *e)]:將線性表L中的第i個位置元素值返回給e;
++++[LocateElem(L, e)]:在線性表L中查找與給定值e相等的元素,如果查找成功,返回該元素在表中序號表示成功;否則,返回0表示失敗;
++++[ListInsert(*L, i, e)]:在線性表L中的第i個位置插入新元素e;
++++[ListDelete(*L, i, *e)]:刪除線性表L中第i個位置元素,並用e返回其值;
++++[ListLength(L)]:返回線性表L的元素個數;
//立鑽哥哥:將所有的在線性表Lb中但不在La中的數據元素插入到La中 void MyUnionL(List *La, List Lb){ int len_La, len_Lb, i; ElemType e;
len_La = ListLength(*La); //求線性表的長度 len_Lb = ListLength(Lb);
for(i=1; i<=len_Lb; i++){ GetElem(Lb, i, &e); //取Lb中第i個數據元素賦給e
//La中不存在和e相同數據元素 if(!LocateElem(*Le, e)){ ListInsert(La, ++len_La, e); //插入 } } } |
++順序存儲結構
++++立鑽哥哥:線性表的順序存儲結構,指的是用一段地址連續的存儲單元依次存儲線性表的數據元素;
++++線性表的每個數據元素的類型都相同,可以用C語言的一維數組來實踐順序存儲結構;
#define MAXSIZE 20 //存儲空間初始分配量 typedef int ElemType; //根據實際情況而定,這裏假設爲int
typedef struct{ ElemType data[MAXSIZE]; //數組存儲數據元素,最大值爲MAXSIZE int length; //線性表當前長度 }SqlList; |
++++存儲器中的每個存儲單元都有自己的編號,這個編號稱爲地址;
++GetElem()獲得元素操作
++++立鑽哥哥:對於線性表的順序存儲結構來說,如果我們要實現GetElem操作,即將線性表L中的第i個位置元素值返回,其實是非常簡單的;就程序而言,只要i的數值在數組下標範圍內,就是把數組第i-1下標的值返回即可;
#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0
typedef int Status;
//Status是函數的類型,其值是函數結果狀態代碼,如OK等 //初始條件:順序線性表L已存在,1<=i<=ListLength(L); //操作結果:用e返回L中第i個數據元素的值 Status GetElem(SqList L, int i, ElemType *e){ if(L.length ==0 || i < 1 || i > L.length){ return ERROR; }
*e = L.data[i - 1];
return OK; } ++++立鑽哥哥:返回值類型Status是一個整型,返回OK代表1,ERROR代表0; |
++ListInsert()插入操作
++++立鑽哥哥:ListInsert(*L, i, e)在線性表L中的第i個位置插入新元素e;插入算法的思路:如果插入位置不合適,拋出異常;如果線性表長度大於等於數組長度,則拋出異常或動態增加容量;從最後一個元素開始向前遍歷到第i個位置,分別將它們都向後移動一個位置;將要插入元素填入位置i處;表長加1;
//初始條件:順序線性表L已存在,1<=i<=ListLength(L) //操作結果:在L中第i個位置之前插入新的數據元素e,L的長度加1 Status ListInsert(SqList *L, int i, ElemType e){ int k;
//順序線性表已經滿 if(L->length == MAXSIZE){ return ERROR; }
//當i不再範圍內時 if(i<1 || i>L->length + 1){ return ERROR; }
//若插入數據位置不在表尾 if(i <= L->length){ //將要插入位置後數據元素向後移動一位 for(k=L->length - 1; k >= i-1; k--){ L->data[k+1] = L->data[k]; } }
L->data[i-1] = e; //將新元素插入 L->length++;
return OK; } |
++ListDelete()刪除操作
++++立鑽哥哥:刪除算法的思路:如果刪除位置不合理,拋出異常;取出刪除元素;從刪除元素位置開始遍歷到最後一個元素位置,分別將它們都向前移動一個位置;表長減1;
//初始條件:順序線性表L已存在,1<=i<=ListLength(L) //操作結果:刪除L的第i個數據元素,並用e返回其值,L的長度減1 Status ListDelete(SqList *L, int i, ElemType *e){ int k;
//線性表爲空 if(L->length == 0){ return ERROR; }
//刪除位置不正確 if(i<1 || i>L->length){ return ERROR; }
*e = L->data[i-1];
//如果刪除不是最後位置 if(i < L->length){ //將刪除位置後繼元素前移 for(k=i; k < L->length; k++){ L->data[k-1] = L->data[k]; } }
L->length--;
return OK; } |
++C3.2、鏈式存儲結構
++C3.2、鏈式存儲結構 |
@@提示:有些博客可能只是開了頭,如果感興趣的同學,可以“點贊”或“評論區留言”,只要關注的同學多了,那就會繼續完善喲!(“++==”,表示沒有寫完的,如果關注度不高就不完善了;“++ok++”,表示此篇博客已經完成,是階段性完整的!)
++++VR雲遊戲=Unity+SteamVR+雲技術+5G+AI;(說明:AI人工智能不是我們的主要研究技術,只是瞭解一下,領略一下有風的感覺!但是,VR是我們的研究重點)
++++【軟件架構設計】分類:https://blog.csdn.net/vrunsoftyanlz/category_9708791.html
++++【大話數據結構(C實現)】:https://blog.csdn.net/VRunSoftYanlz/article/details/104242455
++++【大話數據結構(C#實現)】:https://blog.csdn.net/VRunSoftYanlz/article/details/104243017
++++【遊戲框架】:https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++【C/C++函數與算法】:https://blog.csdn.net/VRunSoftYanlz/article/details/104026090
++++【設計模式簡單整理】:https://blog.csdn.net/VRunSoftYanlz/article/details/79839641
++++【設計模式(精華篇)】:https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++【C++從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/103849127
++++【Linux從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/104176967
++++【Python從入門到放棄】:https://blog.csdn.net/VRunSoftYanlz/article/details/101393069
++++【XLua教程】:https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++【Unity Shader教程】:https://blog.csdn.net/VRunSoftYanlz/article/details/80372628
++++【SteamVR2.2.0快速入門】:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++【SteamVR實戰之PMCore】:https://blog.csdn.net/VRunSoftYanlz/article/details/89463658
++++【Unity企業內訓】:https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++【Cocos2dx面試題】:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++【Unity面試題】:https://blog.csdn.net/VRunSoftYanlz/article/details/78630687
++++【C++C鑄就生存利器】分類:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分類:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立鑽哥哥CSDN空間】:https://blog.csdn.net/VRunSoftYanlz/
【XR遊戲開發QQ羣:784477094】
++立鑽哥哥推薦的拓展學習鏈接(Link_Url):
立鑽哥哥推薦的拓展學習鏈接(Link_Url) |
++++立鑽哥哥Unity 學習空間: http://blog.csdn.net/VRunSoftYanlz/
++++虛擬現實VR資訊: https://blog.csdn.net/VRunSoftYanlz/article/details/89165846
++++HTC_VIVE開發基礎:https://blog.csdn.net/VRunSoftYanlz/article/details/81989970
++++Oculus雜談:https://blog.csdn.net/VRunSoftYanlz/article/details/82469850
++++Oculus安裝使用:https://blog.csdn.net/VRunSoftYanlz/article/details/82718982
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity減少VR暈眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
++++SteamVR簡介:https://blog.csdn.net/VRunSoftYanlz/article/details/86484254
++++SteamVR腳本功能分析:https://blog.csdn.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0開發指南:https://blog.csdn.net/VRunSoftYanlz/article/details/86618187
++++SteamVR2.2.0開發指南:https://blog.csdn.net/VRunSoftYanlz/article/details/88784527
++++SteamVR2.2.0快速入門:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++SteamVR2.2.0交互系統:https://blog.csdn.net/VRunSoftYanlz/article/details/89199778
++++SteamVR2.2.0傳送機制:https://blog.csdn.net/VRunSoftYanlz/article/details/89390866
++++SteamVR2.2.0教程(一):https://blog.csdn.net/VRunSoftYanlz/article/details/89324067
++++SteamVR2.2.0教程(二):https://blog.csdn.net/VRunSoftYanlz/article/details/89894097
++++SteamVR_Skeleton_Poser:https://blog.csdn.net/VRunSoftYanlz/article/details/89931725
++++SteamVR實戰之PMCore:https://blog.csdn.net/VRunSoftYanlz/article/details/89463658
++++SteamVR/Extras:https://blog.csdn.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.csdn.net/VRunSoftYanlz/article/details/86601950
++++OpenXR簡介:https://blog.csdn.net/VRunSoftYanlz/article/details/85726365
++++VRTK雜談:https://blog.csdn.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入門(雜談):https://blog.csdn.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目錄):https://blog.csdn.net/VRunSoftYanlz/article/details/82955410
++++VRTK代碼結構(目錄):https://blog.csdn.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.csdn.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.csdn.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.csdn.net/VRunSoftYanlz/article/details/83120220
++++虛擬現實行業應用:https://blog.csdn.net/VRunSoftYanlz/article/details/88360157
++++Steam平臺上的VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88960085
++++Steam平臺熱銷VR:https://blog.csdn.net/VRunSoftYanlz/article/details/89007741
++++VR實驗:以太網幀的構成:https://blog.csdn.net/VRunSoftYanlz/article/details/82598140
++++實驗四:存儲器擴展實驗:https://blog.csdn.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.csdn.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.csdn.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++Unity5.x用戶手冊:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面試題ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面試題D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面試題E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面試題F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面試題:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++禪道[zentao]:https://blog.csdn.net/VRunSoftYanlz/article/details/83964057
++++Lua快速入門篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入門篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入門篇(基礎概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++框架知識點:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++遊戲框架(UI框架夯實篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++遊戲框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++.Net框架設計:https://blog.csdn.net/VRunSoftYanlz/article/details/87401225
++++從零開始學架構:https://blog.csdn.net/VRunSoftYanlz/article/details/88095895
++++設計模式簡單整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++專題:設計模式(精華篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小項目參考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity小遊戲算法分析:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.csdn.net/VRunSoftYanlz/article/details/82355876
++++UML類圖:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner簡介:https://blog.csdn.net/VRunSoftYanlz/article/details/86500084
++++Unity知識點0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知識點0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader編程(第一篇:快速入門篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader編程(第二篇:基礎夯實篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++Unity引擎基礎:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向組件開發:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系統:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平臺開發:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基礎:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI進階:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI綜合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity動畫系統基礎:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity動畫系統進階:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation導航系統:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity數據存儲:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite數據庫:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW類和協程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity網絡:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++Unity資源加密:https://blog.csdn.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer簡介:https://blog.csdn.net/VRunSoftYanlz/article/details/86652770
++++編寫Photon遊戲服務器:https://blog.csdn.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委託:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#靜態類:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String類:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#數據類型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默認的快捷鍵:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++遊戲相關縮寫:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++UnityAPI.Rigidbody剛體:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材質:https://blog.csdn.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.csdn.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.csdn.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform變換:https://blog.csdn.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider輪碰撞器:https://blog.csdn.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources資源:https://blog.csdn.net/VRunSoftYanlz/article/details/83155518
++++JSON數據結構:https://blog.csdn.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入門:https://blog.csdn.net/VRunSoftYanlz/article/details/82356839
++++Unity企業內訓(目錄):https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++Unity企業內訓(第1講):https://blog.csdn.net/VRunSoftYanlz/article/details/82634733
++++Unity企業內訓(第2講):https://blog.csdn.net/VRunSoftYanlz/article/details/82861180
++++Unity企業內訓(第3講):https://blog.csdn.net/VRunSoftYanlz/article/details/82927699
++++Unity企業內訓(第4講):https://blog.csdn.net/VRunSoftYanlz/article/details/83479776
++++Unity企業內訓(第5講):https://blog.csdn.net/VRunSoftYanlz/article/details/83963811
++++Unity企業內訓(第6講):https://blog.csdn.net/VRunSoftYanlz/article/details/84207696
++++鑽哥帶您瞭解產品原型:https://blog.csdn.net/VRunSoftYanlz/article/details/87303828
++++插件<Obi Rope>:https://blog.csdn.net/VRunSoftYanlz/article/details/83963905
++++計算機組成原理(教材篇):https://blog.csdn.net/VRunSoftYanlz/article/details/82719129
++++5G接入:雲計算和霧計算:https://blog.csdn.net/VRunSoftYanlz/article/details/88372718
++++雲計算通俗講義:https://blog.csdn.net/VRunSoftYanlz/article/details/88652803
++++立鑽哥哥Unity 學習空間: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--