当前位置:   article > 正文

Unity 3D 面试 数据结构与算法简述_unity常用数据结构和算法

unity常用数据结构和算法

一、线性表

定义:一个线性表是n个具有相同特性的数据元素的有限序列,除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(大部分是这样子)。线性表的实现有4种,顺序表、单链表、双向链表和循环链表。

线性表的接口定义:

     interface IListDS<T>
   {
     int GetLength();//求长度
     void Clear();//清空操作
     bool isEmpty();//判断线性表是否为空
     void Add(T item);//附加操作
     void Insert(T item,int i);//插入操作
     T Delete(int i);//删除操作
     T GetElem(int i);//取表元
     T this[int index]{get;}//定义一个索引器 获取元素
     int Locate(T value);//按值查找
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

顺序表和单链表:顺序表是地址连续的存储单元,相邻数据元素在物理位置上也相邻。顺序表在插入删除操作时,需要移动元素,影响了运行效率,单链表的链式存储则不需要移动。相对来说,单链表取值会比较慢。单链表的结点 由两部分组成,一部分data,表示结点的数据域,一部分为next,叫作引用域。

双向链表:在结点中需要设两个引用域,一个保存直接前驱结点的地址,叫prev,一个直接后继结点的地址,叫next,这样子的链表就是双向链表。相对于单链表更为方便。

循环链表:尾部结点指向头结点。

二、栈(Stack)和队列(Queue)

定义:线性表的操作不受限制,而栈和队列的操作受到限制。栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其他操作在表的另外一端进行。栈和队列也被称为受限的线性表。

栈的重要方法如下:
1.Push()入栈 添加数据
2.Pop()出栈 删除数据,返回被删除的数据
3.Peek()取得栈顶的数据,不删除
4.Clear()清空所有数据
5.Count栈中个数
顺序栈用数组实现;链栈用链表实现,需要结点。插入新元素时,让新元素指向原来的栈顶,让头结点指向这个新的元素。

队列的重要方法如下:
1.Enqueue()入队 放在队尾
2.Dequeue()出队 移除对首元素,并返回被移除的元素
3.Peek()获取队首的元素,不移除
4.Clear()清空元素
5.Count获取队列容量大小
顺序队列具有假溢出,即循环顺序队列,当队尾元素满了,会返回队头前面,若为空依旧可以入队,这种情况称为假溢出。
链队列操作只是在一端进行,为了方便操作,把队头设在链表的头部,并且不需要头结点。

三、数组

如果是引用类型,先引用数组,再引用到别的数据。如果是值类型的话,数组里面存储的就是它的值。
数组中的 indexOf 方法及使用:
indexof() :在字符串中从前向后定位字符和字符串;所有的返回值都是指在字符串的绝对位置,如为空则为- 1
lastindexof() :在字符串中从后向前定位字符和字符串;用法和 indexof() 完全相同。

 string test="asdfjsdfjgkfasdsfsgfhgjgfjgdddd";
    test.indexof('d') =2 //从前向后 定位 d 第一次出现的位置
    test.indexof('d',1) =2 //从前向后 定位 d 从第三个字符串 第一次出现的位置
    test.indexof('d',5,2) =6 //从前向后 定位 d 从第5 位开始查,查2位,即 从第5位到第7位;
  • 1
  • 2
  • 3
  • 4

一维数组中常用方法:

object Clone()//创建并返回此对象的副本
object GetValue(int index)//获取指定位置的值
void Reverse(Array array)//反转整个一维Array中元素的顺序
void SetValue(object value,int index)//设置一个指定位置的元素
void CopyTo(Array array,int index)//将一维Array的所有元素复制到指定的一维Array中
void Copy(Array sourceArray,Array destinationArray,int length);//从第一个元素开始复制到Array中的一系列元素到另一个Array中
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

四、排序

冒泡排序:从第一个开始,相邻两个元素之间两两进行比较,较大的向后移动,几趟下来就会得到一个从小到大的数组。
快速排序:将第一个数作为基数,从后开始向前遍历,遇到比基数小的,进行交换,然后被交换的这个数作为新的基数,开始从前向后遍历,遇到比他大的就交换,然后被交换的数作为新的基数,又开始从后向前遍历,几轮下来会得到一组左边的数都小于这个基数,右边的数都大于这个基数,然后将左右两部分通过递归的方法,最后会得到一组从小到大排序好的数组。
直接插入排序:从第一个数组开始插入到一个新的有序数据,从后向前遍历,遇到没有比这个要插入的数大的时候,就插入这个位置,后面的数向后移动一位,几轮下来,一个无序的数组就完全插入到一个有序的数组中来了,即得到一个从小到大的有序数组。
选择排序:从待排序的数组中,选择最小的数与第一个数的位置进行交换,然后第二轮开始,从待排序的第一个数开始遍历,选择最小的数与待排序的第一个数进行交换,几趟下来会得到一个从小到大排序的数组。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/95349
推荐阅读
相关标签
  

闽ICP备14008679号