《大话数据结构(C实现)》 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
YanlzStruct_CBase_V01_1.0 |
严立钻 |
|
2020.02.09 |
|
|
|
|
|
|
++++“大话数据结构(C实现)”:是对“软件架构设计”的综合探索;【程序=数据结构+算法】:数据结构是程序设计的重要技术;数据结构在某种程度上和设计模式类似,都是前辈的武功套路,不同的是,设计模式是近几十年的卓越程序员的智慧结晶,而数据结构是几百上千年的无数科学家、数学家的智慧沉淀,更具有深厚的背景;数据结构是相互之间存在一种或多种特定关系的数据元素的集合;数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科;
++++“大话数据结构(C实现)”:定位在一个科普类知识,了解“数据结构”以及相关算法研究,以及软件架构设计和框架编程!
++++【大话数据结构(C实现)】:https://blog.csdn.net/VRunSoftYanlz/article/details/104242455
++++【大话数据结构(C#实现)】:https://blog.csdn.net/VRunSoftYanlz/article/details/104243017
#第一篇:数据结构基础篇 |
++++数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解与抽象;通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构;
++++[集合]:数据结构中的元素之间除了“同属一个集合”的相互关系外,别无其他关系;
++++[线性结构]:数据结构中的元素存在一对一的相互关系;
++++[树形结构]:数据结构中的元素存在一对多的相互关系;
++++[图形结构]:数据结构中的元素存在多对多的相互关系;
++++[数组(Array)]:数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合;数组可以说是最基本的数据结构,在各种编程语言中都有对应;一个数组可以分解为多个数组元素,按照数据元素的类型,数组可以分为整型数组、字符型数组、浮点型数组、指针数组和结构数组等;数组还可以有一维、二维以及多维等表现形式;
++++[栈(Stack)]:栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作;栈按照后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出;栈在汇编语言程序中,经常用于重要数据的现场保护;栈中没有数据时,称为空栈;
++++[队列(Queue)]:队列和栈类似,也是一种特殊的线性表;和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作;一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称为队头;队列中没有元素时,称为空队列;
++++[链表(Linked List)]:链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点;链表由一系列数据结点构成,每个数据结点包括数据域和指针域两部分;其中,指针域保存了数据结构中下一个元素存放的地址;链表结构中数据元素的逻辑顺序时通过链表中的指针链接次序来实现的;
++++[树(Tree)]:树是典型的非线性结构,它是包括,2个结点的有穷集合K;在树结构中,有且仅有一个根结点,该结点没有前驱结点;在树结构中的其他结点都有且仅有一个前驱结点,而且可以有两个后继结点,m>=0;
++++[图(Graph)]:图是另一种非线性数据结构;在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对;如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系;
++++[堆(Heap)]:堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆;堆的特点是根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是一个堆结构;
++++[散列表(Hash)]:散列表源自于散列函数(Hash Function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录;
#第二篇:进阶算法篇 |
++++[有穷性(Finiteness)]:算法的有穷性是指算法必须能在执行有限个步骤之后终止;
++++[确切性(Definiteness)]:算法的每一步骤必须有确切的定义;
++++[输入项(Input)]:一个算法由0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
++++[输出项(Output)]:一个算法有一个或多个输出,以反映对输入数据加工后的结果;没有输出的算法是毫无意义的;
++++[可行性(Effectiveness)]:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性);
++++[输入]:有零个或多个输入;
++++[输出]:至少有一个输出;
++++[确定性]:组成算法的每条指令清晰,无歧义;
++++[有限性]:一个算法在执行有限步骤后必须结束,即计算步骤是有限的;
++++描述算法可以由多种方式,如自然语言、流程图、伪代码、程序设计语言;算法设计就是针对具体的问题,设计出良好的算法,使计算机能够解决该问题;同一个问题可以采用不同的算法实现,不同的算法可能时间、空间并不相同,一个算法的优劣可以用空间复杂度与时间复杂度来衡量;
++++[顺序存储结构]:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的;
++++[链式存储结构]:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的;
++++[抽象]:是指抽取出事物具有的普遍性的本质;“抽象”的意义在于数据类型的数学抽象特性;
++++[输入输出]:算法具有零个或多个输入;算法至少有一个或多个输出;
++++[有穷性]:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成;
++++[确定性]:算法的每一步骤都具有确定的含义,不会出现二义性;
++++[可行性]:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成;
++++[正确性]:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案;
++++[可读性]:算法设计的另一目的是为了便于阅读、理解和交流;
++++[健壮性]:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果;
++++[时间效率高和存储量低]:设计算法应该尽量满足时间效率高和存储量低的需求;
++推导大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)]:对数阶;
++++【设计模式(精华篇)】: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、进阶算法篇 |
++++[输入]:有零个或多个输入;
++++[输出]:至少有一个输出;
++++[确定性]:组成算法的每条指令清晰,无歧义;
++++[有限性]:一个算法在执行有限步骤后必须结束,即计算步骤是有限的;
++++描述算法可以由多种方式,如自然语言、流程图、伪代码、程序设计语言;算法设计就是针对具体的问题,设计出良好的算法,使计算机能够解决该问题;同一个问题可以采用不同的算法实现,不同的算法可能时间、空间并不相同,一个算法的优劣可以用空间复杂度与时间复杂度来衡量;
++排序算法 |
++++直接插入排序 |
++++[稳定性与复杂度]:直接插入排序属于稳定的排序方法,直接插入排序算法的时间复杂度为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 t = a[i]; for(j=i-1; j>=0&&t; j--){ a[j+1] = a[j]; } a[j+1] = t;
PrintMyArray(a, n); } }
void PrintMyArray(int a[], int n) { ... ... } |
++++折半插入排序 |
++++[折半插入排序与直接插入排序的区别]:直接插入排序,从右到左按顺序查找插入的位置;折半插入排序,折半查找算法在有序集合中查找插入的位置;
++++[主要用途]:折半插入排序算法也直接插入排序一样,通常也用于待排序元素的个数较少的情况;如果待排序算法基本有序,则最好采用直接插入排序算法;
//立钻哥哥:折半插入排序算法 #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 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){ ... ... } |
++++希尔排序 |
++++[与直接插入排序、折半插入排序的区别]:直接插入排序、折半插入排序;待排序元素构成一个子序列;希尔排序:待排序元素划分为若干个子序列,需要分别对每个子序列进行排序;
++++[主要用途]:希尔排序算法可以使值较小的元素很快向前移动,当待排序元素基本有序时,再使用直接插入排序处理,时间效率会高很多;希尔排序主要用在数据量在5000以下且速度要求并不是很重要的场合;
//立钻哥哥:希尔排序算法 #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; 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 MyShellInsert(a, length, delta[i]); MyDispArray(a, length); } }
//输出数组a中的元素 void MyDispArray(int a[], int length){ } |
++交换排序 |
++++冒泡排序 |
++++[主要用途]:冒泡算法实现简单,适用于待排序元素较少且对时间要求不高的场合;
//立钻哥哥:冒泡排序算法 #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){ ... ... } |
++++快速排序 |
++++快速排序算法可以通过递归调用实现,排序的过程其实就是不断地对元素序列进行划分,直到每一个部分不能划分时即完成快速排序;
++++[主要用途]:快速算法是冒泡排序算法的改进,实现比较算法,它主要用在需要对大量数据进行排序的情况,它的时间效率要远高于冒泡排序,在数据量特别大的情况下特别明显;
//立钻哥哥:快速排序算法 #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); } ++++立钻哥哥:快速算法是冒泡排序算法的改进,实现比较复杂,它主要用在需要对大量数据进行排序的情况,它的时间效率要远高于冒泡排序,在数据量特别大的情况下特别明显; |
++选择排序 |
++++简单选择排序 |
++++[主要用途]:简单选择排序算法实现简单,适用于待排序元素较少且对时间要求不高的场合;
//立钻哥哥:简单选择排序算法 #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 j = i;
//最小的元素的序号为j for(k=i+1; 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.1、顺序存储结构 |
++++[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; |
++++存储器中的每个存储单元都有自己的编号,这个编号称为地址;
#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; |
//初始条件:顺序线性表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; } |
//初始条件:顺序线性表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、链式存储结构 |
++++【大话数据结构(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) |
++++立钻哥哥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
++++插件
++++计算机组成原理(教材篇):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--_--