随笔分类 - 恋上数据结构与算法第一季
摘要:队列 队列(Queue) 队列一种特殊的线性表,只能在头尾两端进行操作 队尾(rear):只能从队尾添加元素,一般叫做enQueue,入队 队头(front):只能从队头移除元素,一般叫做deQueue,出队 先进先出的原则,First In First Out,FIFO 队列(Queue)接口设计
阅读全文
摘要:栈 栈(Stack) 栈是一种特殊的线性表,只能在一端进行操作 往栈中添加元素的操作,一般叫做push,入栈 从栈中移除元素的操作,一般叫做pop,出栈(只能移除栈顶元素,也叫做:弹出栈顶元素) 后进先出的原则,Last In First Out,LIFO 注意:这里说的 “栈” 与内存中的 “栈空
阅读全文
摘要:循环链表 单向循环链表 单向循环链表的结构 尾结点的next,指向头结点 当只有一个结点 接口设计 相较于单向链表,单向循环链表需要重写插入结点、删除结点两个方法 插入节点,需要特别关注插入头节点的情况。此时需要拿到尾节点,然后将其next指向新节点。 public class SingleCirc
阅读全文
摘要:链表 链表(Linked List) 动态数组有个明显得缺点 可能造成内存空间的大量浪费 能否用到多少就申请多少内存? 链表可以办到这一点 链表是一种链式存储的线性表, 所有元素的内存地址不一定是连续的 链表(Linked List)接口设计 链表的大部分接口和动态数组是一致的 int size()
阅读全文
摘要:动态数组 什么是数据结构? 数据结构是计算机存储、组织数据的方式 在实际应用中,根据使用场景来选择最合适的数据结构 参考:数据结构与算法动态可视化 线性表 线性表是具有 n 个相同类型元素的有限序列( n ≥ 0 ) a1 是首节点(首元素), an 是尾结点(尾元素) a1 是 a2 的前驱, a
阅读全文
摘要:复杂度 什么是算法? 算法是用于解决特定问题的一系列的执行步骤 // 计算a和b的和 public static int plus(int a, int b){ return a + b; } // 计算1+2+3+...+n的和 public static int sum(int n){ int
阅读全文
摘要:Why Java? C:非面向对象,写法复杂,大量内存管理代码 C++:写法复杂,大量内存管理代码 Objective-C、Swift:需要 Mac 系统 JavaScript、Python:依赖于脚本解析器,同一个逻辑使用不同写法会影响代码性能,影响算法性能测评 Java:语法丰富严谨,更多的注意
阅读全文