自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

钢琴师的博客

时刻保持一颗好奇之心

  • 博客(85)
  • 收藏
  • 关注

原创 数据结构(二分查找)

折半查找又叫二分查找,其基本思想是:在有序表中,取中间记录作为比较对象,如果查找的记录的关键码等于中间记录的关键码,则查找成功;若小于,则在左半区查找;若大于,则在右半区查找。不断重复直到查找成功,或没有要查找的记录,查找失败。 public int BinarySearch(List<int> list,int key ) { int mid = 0;

2017-11-28 13:56:02 484 1

原创 数据结构(堆排序和归并排序)

堆排序 在直接选择排序中,顺序表是一个线性结构,要从有n个记录的顺序表中选择出一个最小的记录需要比较n-1 次。如能把待排序的n个记录构成一个完全二叉树结构,则每次选择出一个最大(或最小)的记录比较的次数就是完全二叉树的高度,即log2n次,则排序算法的时间复杂度就是O(nlog2n)。这就是堆排序(Heap Sort)的基本思想。 堆排序中的堆分为最大堆和最小堆,最大堆的定义如下: 设顺序表

2017-11-28 13:50:47 487

原创 数据结构(排序)

1>排序是把一个记录(在排序中把数据元素称为记录)集合或序列重新排列成按记录的某个数据项值递增或者递减的序列。 2>在为排序依据的数据项称为“排序项”,也成为排序的关键码,关键码分为主关键码和次关键码。 3>排序分为内部排序和外部排序。内部排序指的是在排序的整个过程中,记录全部存放在计算机的内存中,并且在内存中调整记录之间的相对位置,在此期间没有进行内、外存的数据交换。 外部排序指的是在排序过程

2017-11-17 15:32:35 2064

原创 数据结构(单源最短路径)

单源最短路径指的是找到A,B两点之间路径中权值之和最小的路径。 狄克斯特拉算法(Dikastra) 对于求单源点的最短路径问题,狄克斯特拉(Dikastra)提出了一个按路径长度递增的顺序逐步产生最短路径的构造算法。狄克斯特拉的算法思想是:设置两个顶点的集合S和T,集 合S中存放已找到最短路径的顶点,集合T中存放当前还未找到最短路径的顶点。初始状态时,集合S中只包含源点,设为v0,然后从集合T中

2017-11-17 13:59:59 1031

原创 数据结构(最小生成树)

对于一个无相连通网,他的所有生成树中必有一棵边的权值总和最小的生成树,称之为最小代价生成树,简称最小生成树。 最小生成树必须满足三个条件: 1>构造的最小生成树必须包括n个顶点; 2>构造的最小生成树有且仅有n-1条边; 3>构造的最小生成树中不存在回路。 普利姆算法(Prim) 假设G=(V,E)为一无向连通网,其中,V为网中顶点的集合,E为网中边的集合。设置两个新的集合U和T,其

2017-11-17 12:31:48 700

原创 数据结构(图的遍历)

图的遍历指的是从图中的某个顶点出发,按照某种顺序访问每个顶点,使得每个顶点被访问且仅访问一次。 对于之前的邻接矩阵表示的图,加以更改,添加相应功能。 private int[] visited;//表示某个顶点是否被访问 public VexNode<T> this[int index] { get { return adjList[index]; }set { adjList[

2017-11-17 11:40:31 377

原创 数据结构(图的存储结构)

树形结构节点之间是一对多的关系,节点之间有明显的分支关系和层次关系。每一层的结点可以和下一层的多个节点相关,但只能和上一层的一个节点相关。而图中的顶点间的关系是任意的,没有明显的层次关系。 图的定义:图是由非空顶点集合和描述顶点间的关系–边或弧的集合组成。 图的基本术语 边,弧,弧头,弧尾:无向图之间顶点的连线称为边。有向图之间定点的连线称为弧。弧的始点称为弧尾,弧的终点称为弧尾 无向完全图

2017-11-17 10:41:13 759

原创 数据结构(哈夫曼树)

几个基本概念: 路径:从树中的一个结点到另一个结点之间的分支构成这两个结点间的路径。 路径长度:路径上的分支数。 树的路径长度:从树的根结点到每个结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。 结点的权:在一些应用中,赋予树中结点的一个有实际意义的数。 结点的带权路径长度:从该结点到树的根结点的路径长度与该结点的权的乘积。 树的带权路径长度:树中所有叶子结点的带

2017-11-16 16:43:36 541

原创 数据结构(树和二叉树的转换与遍历)

二叉树的遍历 先序遍历(DLR):先遍历根节点,再遍历左子树,最后遍历右子树 遍历结果:ABDHIEJCFG public void PreOrder(Node<T> root) { if (root==null) { return; } Console

2017-11-16 16:08:46 2615

原创 数据结构(二叉树)

二叉树的定义:二叉树(Binary Tree)是 n(n≥0)个相同类型的结点的有限集合。n=0 的二叉树称为空二叉树(Empty Binary Tree);对于 n>0 的任意非空二叉树有: (1)有且仅有一个特殊的结点称为二叉树的根(Root)结点,根没有前驱结点; (2)若n>1,则除根结点外,其余结点被分成了 2 个互不相交的集合TL,TR,而TL、TR本身又是一棵二叉树,分别称为这

2017-11-16 15:32:05 291

原创 数据结构(树)

- 树的定义树是n个具有相同类型的数据元素的有限集合。树的中数据元素叫做结点。n=0的树称为空树。对于n>0的非空树有: 1>有且仅有一个特殊的结点称为树的根(Root)结点,根没有前驱结点; 2>若n>1,则除根结点外,其余结点被分成了m(m>0)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。树T1,T2,…,Tm称为这棵树的子树(Subtree)。-

2017-11-16 14:26:41 282

原创 数据结构(队列)

队列的定义:队列是插入操作限定在表的尾部,而其他操作限定在表的头部的线性表。把进行插入操作的尾部称为队尾(Rear),把进行其他操作的头部称为队头(Front)。堆列中没有元素时称为空队列。 队列的接口定义: interface IQueueDS<T> { int GetLength();//获取长度 bool IsEmpty();//判空

2017-11-16 11:25:48 269

原创 数据结构(栈)

栈和队列也是线性结构,线性表,栈和队列这三种数据结构的数据元素,以及数据元素之间的关系完全相同,差别是线性表的操作不受限制,而栈和队列的操作受到限制。栈的操作只能在表的一端进行,队列的插入操作在表的一端而其他操作在表的另一端记性,所以把栈和队列称为操作受限制的线性表。 栈的定义:栈是操作限定在尾端的线性表。表尾由于要进行插入,删除等操作,所以它具有特殊的含义,把表尾称为栈顶,另一端是固定的,称为栈

2017-11-16 10:30:19 232

原创 数据结构(线性表)

线性表的逻辑结构线性结构的特点是数据元素之间存在一对一的线性关系。即:(1)除第一个元素之外所有元素位置前面都只有一个元素,称为直接前驱(2)出最后一个元素之外所有元素位置后面都只有一个元素称为直接后继。 根据线性表的基本操作作出相应的规约,即接口: interface IListDS { int GetLength();//获取长度 void C

2017-11-15 16:59:46 245

原创 数据结构(简介)

一、数据结构基本概念数据:数据时外部世界信息的载体,是计算机程序加工的原料。 数据元素:数据元素是数据的基本单位。 数据项:数据项是不可分割的。含有独立意义的最小数据单位,分为初等项(处理时不可分割,如籍贯)和组合项(处理时可以分割,如成绩)。 数据对象:性质相同的数据元素的集合。 数据类型:数据的取值范围和核对数据进行操作的集合。 数据结构:相互之间存在一种或多种关系的数据元素的集合。四

2017-11-15 15:37:07 341

原创 Unity编写雷霆战机流程(二)

三、功能的具体实现这里只介绍部分主要功能以及一些核心代码,其他细节可自行设计1. 开始游戏场景:开始游戏点击开始按钮,调用Gamanager里的公开方法,运行开始面板的动画(这里用的是DoTween插件)并播放声音即可 public void OnStartGameButton() { startGamePanelTween.DOPlayForward();

2017-06-19 11:50:26 1413

原创 Unity编写雷霆战机流程(一)

最近编写了一个类似雷霆战机的游戏,具体总结了下思路,希望可以帮助到要编写此游戏或者其他游戏的开发者。(由于是个人编写,而且能力有限,所以有不足之处还望各位大神多多包涵) 一、场景预览 这里一共四个场景:首先看一下效果图 游戏开始界面: 第一关(和第三关): 第二关: 还额外做了一个CG场景以及场景加载界面: 游戏试玩下载地址:http://pan

2017-06-19 10:34:05 2481

原创 Unity发布安卓Apk流程

一、安装并配置JDK 这在我的另一篇博客里讲过:http://blog.csdn.net/hui110110/article/details/52432259 二、下载SDK(并更新API) 这里提供一个下载地址(压缩包包含JDK和SDK) https://pan.baidu.com/s/1slCui5Z 下载完成后可安装到任意路径,但是注意不要有中文路径。 API版本如果不够用的话,可

2017-06-19 08:58:46 627

原创 Mecanim动画系统学习(三)

对于动画状态机中混合树的使用可以帮助我们更为方便的编辑动画,今天主要介绍一个敌人的AI,他实现了行走以及射击。 首先创建行走的混合树,因为行走由速度以及角速度决定,因此选择BlendType为2D Simple Directional并且设置两个参数Speed(对应Pos Y)和AngularSpeed(对应Pos X), 其中Compute Positions选择为Speed an

2017-06-01 21:39:22 372

原创 Mecanim动画系统学习(二)

当我们把动画类型选为Humanoid时便可以通过选择Configure对谷歌进行编辑,进入编辑页面 通常情况下可以选择Mapping的AutoMap选项,骨骼会进行自动的对应,但是当骨骼过多时可能会出现对应错误的情况 如图左手缺失一块骨骼,且没有对应的骨骼显示为灰色,我们需要在右图中找到该骨骼的对应位置,把他拖进去就好了 骨骼编辑完成后,可选择进入Muscles&Settings面

2017-06-01 21:23:45 294

原创 Mecanim动画系统学习(一)

Mecanim动画系统是Unity3D推出的全新的动画系统,具有重定向、可融合等诸多新特性. 相较于Unity4.0之前的Leagcy动画类型,Generic和humanoid提出了状态记得概念,是的动画之间可以实现更为方便的切换,而Humanoid则比Generic多了动画的重定向功能(只限于人形动画),即同一动画可以用到不同的模型身上。 首先了解一下相关的属性: 这里Clips的Sta

2017-06-01 21:14:15 475

原创 Unity实现虚拟摇杆

首先添加两者图片 从左到右分别是Back和Front 将Front放到Back中心 在Front身上添加脚本using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;//导入命名空间public class JoyStick

2017-05-29 11:50:27 818

原创 const,static和readonly区别

首先说一下static。static实际和两者区别很大,甚至可以不用放在一起进行比较,它表示静态,用于在声明类时实例化方法或者字段,不能通过实例化的类调用静态方法或字段,静态方法只能调用静态类的成员 const:静态常量(也叫编译时常量),readonly:动态常量(也叫运行时常量) const只能在声明时初始化,reandonly可以在声明时或构造函数中初始化, const都是静态的不能用s

2017-05-29 11:29:42 481

原创 Unity碎片整理

一、碰撞发生条件:检测方必须具有刚体+碰撞器,被检测方必须具有碰撞器 二、不让物体显示的几种方式: 1,Destroy(gameObject);彻底销毁了游戏对象, 2,Renderer[] allRenders = GetComponentsInChildren(); foreach (var ren in allRenders) {  ren.enabled

2017-05-29 11:22:45 461

原创 正则表达式

概念:正则表达式使用一种数学算法来解决计算机程序中的文本检索,匹配等问题。正则表达式是一种专门用于字符串处理的语言,主要用于检索(通过正则表达式获取我们想要的部分)和匹配(判断给定字符串是否符合我们的过滤逻辑) 正则表达式常用元字符: ^:匹配字符串的开始 $:匹配字符串的结束 *:匹配前面字符任意次 +:匹配字符一次或多次 ?:匹配0次或一次 {n,m}:匹配n到m次 {n,}:匹

2017-05-17 19:58:45 232 1

原创 String和StringBuilder

String创建的字符串内容是不可改变的,对字符串进行的操作实际上是新开辟了内存,效率很低。 StringBuilder创阿金的字符串内容可以改变,对字符串进行的操作都是在原始字符串上进行更改,因此当我们需要对一个字符串进行频繁操作时,使用StringBuilder效率更高。 String常用操作: string s = " www.baidu.com";//字符串内容是不可变的

2017-05-17 19:50:10 300

原创 C#中的几个比较

非泛型集合(ArrayList):一个集合可以包含所有object类型的数据,但是会进行繁琐的装箱和拆箱操作,性能有所损失 泛型集合(List):一个列表只包含一种类型的数据,但是不存在装箱和拆箱,建议使用。 堆和栈 GC回收一般发生在内存不够用时,否则不会发生除非手动调用,GC将停止所有运行中的线程,完全停止。 引用类型永远存储在堆上,值类型取决于声明的位置 值类型和引用类型在内容更改时

2017-05-16 21:34:20 303

原创 利用C#创建一个我们自己的列表

通过C#创建一个列表,实现索引器,构造器,添加,删除,排序等功能。 class MyList<T> where T:IComparable { private T[] array; private int count; public MyList(int size) { if (size >= 0)

2017-05-16 20:31:21 791

原创 C#碎片整理(二)

构造函数就是用于初始化数据块的函数 属性不会默认设置get或set方法,如果没有设置get或set,则不可读或写 var声明的匿名类型,初始化之后类型确定,并且以后不可修改。 继承分为实现继承和接口继承 隐藏方法通常用关键字加以区分 抽象类是一个不完整的模板,不能实例化,可以用抽象类去声明对象,但不能构造对象。继承抽象类时必须实现抽象方法。 子类必须至少继承一个父类的构造函数,如果不写,

2017-05-16 20:29:24 448 1

原创 C#碎片整理(一)

编程工具产生的代码和基类库(BCL)组成公共语言运行库(CLR) 代码经过编译和运行过程称为机器可识别的机器语言。 编译过程:.NET兼容的代码文件经过贬义词产生程序集(DLL文件或者EXE)包括CIL(公共中间语言)和类型信息 运行过程:程序集通过CLR里的JIT及时编译器解析成本地代码 托管代码:托管代码是编译所产生的中间语言,运行在CLR上,接受内存管理,垃圾回收等服务 非托管代码:

2017-05-15 20:51:24 733

原创 Unity中的几个”近义词”

最近整理并研究了一些平时是学习Unity容易混淆的函数,来和大家分享一下! Vector3.forward&transform.forward 翻看Unity圣典中的解释 Vector3.forward:写Vector3(0,0,1)的简码。也就是Z轴 transform.forward:在世界空间坐标变换的蓝色轴,也就是Z轴 通过字面意思我们可以知道,Vector3.forward在世界

2017-05-15 20:33:38 589

原创 [我眼中的C#]反射和特性

程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BLC中的类)这些也是数据。 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程序集中。 程序在运行时,可以查看其它程序集或其本身的元数据。一个运行的程序查看本身的元数据或者其他程序集的元数据的行为叫做反射。 特性(attribute)是一种允许我们向程序的程序集增加元数据的语言结构。它是用于保存程序结

2017-03-17 11:23:44 344

原创 [我眼中的C#]委托和Lambda表达式

委托是 C#用来传递方法的引用的语法,和类相同,委托调用之前也要经过定义和声明的过程private delegate string GetString(); static void Main(string[] args) { ////委托是一个类型,这个类型可以赋值一个方法的引用 ////ToString()是objec

2017-03-17 11:08:19 359

原创 [我眼中的C#]XML和JSON

JSON JSON式存储和交换文本信息的语法,它是一种轻量级文本数据交换格式,JSON独立于语言,他具有自我描述性,所以相对于XML更容易理解。 学习JSON之前需要导入JSON 解析库,我们这里需要的是LitJSON.DLL,有两种方式导入 1,直接去JSON官网从C#模块下载, 2,通过VS项目引用里的的NuGET直接联机下载。 之后通过JSON创建两个json文档 {}代表一

2017-03-17 11:02:03 412

原创 [我眼中的C#]文件读写操作

通过FileInfo和DirectoryInfo查看文件和文件夹信息 首先创建一个文本文件(内容为“Hello World!”),这个文件的目录位于工程路径下,但是FileInfo所访问的路径位于Debug文件夹下,所以,要把文本文件的“复制到输出路径”选为“如果较新则复制”。 之后进行文件操作:FileInfo fileInfo = new FileInfo("TextFile1.txt");

2017-03-17 10:45:44 295

原创 [我眼中的C#]创建多人聊天室

服务器端: static List<Client> clients = new List<Client>(); /// <summary> /// 广播消息 /// </summary> /// <param name="message"></param> public static void BroadcastMess

2017-03-17 09:54:13 1396

原创 [我眼中的C#]网络编程

TCP协议通过Socket(套接字)建服务器和客户端 服务器端: static void Main(string[] args) { //创建Socket,这里用的是TCP协议,所以SocketType为Stream(流) Socket tcpServer = new Socket(AddressFamily.InterNe

2017-03-17 09:51:07 270

原创 [我眼中的C#]多线程编程

首先了解一下相关概念。 进程:正在运行的计算机程序的实例。 线程: 有事被称作轻量级进程,是程序执行流的最小单元 开启一个线程通常有几种方式,接下来一一介绍。 通过委托开启 可以通过Action和Func委托分别开启两个不带和带有返回值的线程 先定义两个方法,Thread.CurrentThread.ManagedThreadId用来返回线程ID Action委托示例如下:

2017-03-17 09:34:11 371

原创 [我眼中的C#]正则表达式

什么是正则表达式? 英文Regular Expression,是计算机科学的一个重要概念,她使用一种数学算法来解决计算机程序中的文本检索,匹配等问题,正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,c#也不例外,它可以帮我们解决下面的问题: 1,检索:通过正则表达式,从字符串中获取我们想要的部分 2,匹配:判断给定的字符串是否符合正则表达式的过滤逻

2017-03-16 16:39:56 274

原创 [我眼中的C#]String和StringBuilder

先介绍一个有趣的概念,string和String的区别,前者是后者的别名,所以两者在定义的时候几乎没什么区别。(可以吧string理解为C#中的关键字,而String是.NET里面预定义的类,调用后者需要导入名称空间System。)。 string定义的字符串是一个不可变的字符串,我们通过给字符串赋值本质上是将该引用指向另一块内存空间,而原来的空间被GC(垃圾回收器)回收掉,而StringBuil

2017-03-16 16:25:26 240

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除