* 数组:存储多个相同类型的数据的集合
* 特点:数组中的元素可以试基本类型,也可以是引用类型
* 数组有下标,下标从0开始计数,a[0],表示第一个元素
* 数组在创建的时候是需要申请内存空间,而且内存空间固定,一旦数据长度超过申请的内存空间,就会导致数组的越界。
* 数组便于更新和修改,不便于删除
* 数组分为数值数组,字符数组,指针数组,结构体数组
*
* 栈:一种只能在表头插入和删除的操作的线性表,堆栈
* 特点:按照先进后出原则存储 只能在栈顶操作
* 栈分为顺序栈和链式栈
*
* 堆:用于动态分配和释放程序所使用的对象
* 特点:堆分为最小堆和最大堆,区别在于所有父节点是否大于等于其子节点,是则最大堆,否则反之
*
* 队列:一种特殊的线性表,只能在队头进行删除数据操作,在队尾进行增加数据操作
* 特点:遵循先进先出原则存储数据
* 队列分为顺序队列,循环队列
*
* 链表:一种非连续,非顺序的存储方式,通过指针将数据进行连接的方式实现
*
*特点:在创建的时候,不需要指定长度,可以动态调整长度,不易产生越界
* 链表的每个元素分为数组段,指针段,指针指向下一个数据的地址,从而形成串联
* 便于增加和删除,不便于数据查询
* 链表分为单链表,双向链表,循环链表
*
* 树:一个有根节点和若干个子节点的集合
* 特点:有且仅有一个根节点
* 子树直接不可以有交集
* 树分为无序树,有序,二叉树
* 树的深度值指的的是树的层次
* 一个节点的度值得是该节点下有多少个子节点
* 二叉树值得是每个节点的度<=2的树
* 树的遍历分为三种:分别前序遍历(跟左右),中序遍历(左根有),后序遍历左右跟
*/
public class SunActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sun)
}
/**
* 两数之和:
* 给定一个整数数组和一个目标值,找出组中和为目标值的两个数的位置。
* 可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
* @return
*/
public static int[] twoSum(int [] number, int target){
for (int i = 0
for (int j = i + 1
if (number[i] + number[j] == target) {
return new int[]{i, j}
}
}
}
return number
}
/**
* 插入排序算法:
* 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即
* [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k ,
* 并且在寻找这个位置 k 的过程中逐个将比较过的元素往后移一位,为元素 x
* “腾位置”,最后将 k 对应的元素值赋为 x ,一般情况下,插入排序的时间复
* 杂度和空间复杂度分别为 O(n2 ) 和 O(1)。
*/
public int [] sortInsert(int []array){
for (int i = 1
int temp = array[i]
int j
for (j = i-1
array[j+1] = array[j]
}
array[j+1] = temp
}
return array
}
/**
* 选择排序
* 选择排序的基本思想是遍历数组的过程中,
* 以 i 代表当前需要排序的序号,则需要在剩余的 [i…n-1]
* 中找出其中的最小值,然后将找到的最小值与 i 指向的值进行交换。因为每一趟确定元素的过程中都会
* 有一个选择最大值的子流程,所以人们形象地称之为选择排序。选择排序的时间复杂度和空间复杂度分别为
* O(n2 ) 和 O(1) 。
*/
public int [] sortSelect(int [] array){
for (int i = 0
int miniSort = i
for ( int m = i+1
if (array[m] < array[miniSort]){
miniSort = m
}
}
if (array[i] > array[miniSort]){
int temp
temp = array[i]
array[i]= array[miniSort]
array[miniSort] = temp
}
}
return array
}