基本数据结构
数据结构
相互之间存在的一种或多种特定关系的数据元素的集合
算法
是解决特定问题求解步骤的描述,在计算机中表现为指令的有效序列,并且每条指令表示一个或多个操作。
算法时间复杂度
分析算法复杂度,关键在于分析循环结构的运行情况。
对数阶
int count = 1;
while(count<n){
count = count*2;
/* O(1) */
}
平方阶
int i, j;
for(i=0; i<n; i++){
for(j=0; j<n; j++){
/* O(1) */
}
}
数组
连续存储,内存空间必须一次性分配足。
可以通过索引快速找到对应元素。
查、改的时间复杂度为O(1)
增、删的时间复杂度为O(n)
//访问
void traverse(int[] arr){
for(int i; i < arr.length; i++){
//迭代访问arr[i]
}
}
链表
元素不连续,靠指针指向下一个元素的位置。
增、删的时间复杂度为O(1)
查、改的时间复杂度为O(n)
class ListNode{
int val;
ListNode next;
}
//遍历
void traverse(ListNode head){
for(ListNode p = head; p!=null; p.next){
//迭代遍历
}
}
二叉树
/*基本二叉树结点*/
class TreeNode{
int val;
TreeNode left, right;
}
void traverse(TreeNode root){
traverse(left);
traverse(right);
}
基本N叉树
/*基本N叉树节点*/
class TreeNode{
int val;
TreeNode[] children;
}
void traverse(TreeNode root){
for(TreeNode child : root.children)
}
/*框架思维*/
void traverse(TreeNode root){
//前序遍历
traverse(left);
//中序遍历
traverse(right);
//后序遍历
}