随笔分类 - 数据结构与算法
摘要:十大排序算法 以上表格是基于数组进行排序的一般性结论 冒泡,选择,插入,归并,快速,希尔,堆排序,属于比较排序(Comparison Sorting) 1)冒泡排序(Bubble Sort) 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对
阅读全文
摘要:如果维护一个有序的动态数组,使用二分搜索,最坏时间复杂度:0(log2n),但是添加,删除的平均时间复杂度是O(n). 所以有一个更好的方法,就是使用二叉搜索树,添加,删除,搜索的最坏时间复杂度均优化至:O(log2n) 二叉搜索树(Binary Search Tree) 二叉搜索树是二叉树的一种,
阅读全文
摘要:树(Tree)的基本概念 节点,根节点,父节点,子节点,兄弟节点 一棵树可以没有任何节点,称为空树 一棵树可以只有1个节点,也只有根节点 子树,左子树,右子树 节点的度(degree):子树的个数 树的度:所有节点度中的最大值 叶子节点(leaf):度为0的节点 节点的深度(depth):从根节点到
阅读全文
摘要:队列(Queue) 队列是一种特殊的线性表,只能在头尾两端进行操作 队尾(rear):只能从队尾添加元素,一般叫做enQueue,入队 队头(front):只能从队头移除元素,一般叫做deQueue,出队 先进先出,First In First Out,FIFO 因为队列频繁在首尾两端操作数据,可以
阅读全文
摘要:栈(stack) 栈是一种特殊的线性表,只能在一端进行操作(后进先出,Last In First Out,LIFO) 往栈中添加元素的操作,一般叫做push,入栈 从栈中移除元素的操作,一般叫做pop,出栈(只能移除栈顶元素,也叫做弹出栈顶元素) 注意,这里说的栈与内存中的栈空间是两个不同的概念 判
阅读全文
摘要:动态数组有个明显的缺点,有可能会造成内存空间的大量浪费,能否用到多少就申请多少内存? 链表可以办到这一点,链表是一种链式存储的线性表,所有元素的内存地址不一定是连续的. 单向链表实现(Java) package zh.datastructures.LinkedList; public class L
阅读全文
摘要:什么是数据结构? 数据结构是计算机存储,组织数据的方式,常见的数据结构: 线性结构: 线性表(数组,链表) 栈,队列 哈希表 树形结构: 二叉树 AVL树 红黑树 B树 堆 Trie 哈夫曼树 并查集 图形结构: 邻接矩阵 邻接表 线性表是具有n个相同类型元素的有限序列(n>=0) a1是首节点,a
阅读全文
摘要:什么是算法? 算法是用于解决特定问题的一系列的执行步骤,使用不同算法,解决痛一个问题,效率可能相差非常大. 求第 n 个斐波那契数 package zh.algorithm; public class Fibonacci { // 方法1:递归,因为fib(n)必须要计算前面两个数,所以复杂度为2*
阅读全文

浙公网安备 33010602011771号