随笔分类 - 软件工程相关 / 数据结构与算法
摘要:集合: 实现: 1 基于链表实现Set package com.lt.datastructure.Set; import com.lt.datastructure.LinkedList.LinkedList; public class LinkedListSet<E> implements Set<
阅读全文
摘要:package com.lt.datastructure.Set; import java.util.TreeSet; /* * 一个摩斯码,对应一个字母。返回我们可以获得所有词不同单词翻译的数量。 * 遍历字符串,word.charAt(i)-'a'获得当前字符所对应的索引,添加到StringBu
阅读全文
摘要:实现二分搜索树: package com.lt.datastructure.BST; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class BST<E extends Com
阅读全文
摘要:二分搜索树广度优先遍历的实现: /* * 二分搜索树的层序遍历(广度优先遍历),队列实现 * 广度优先遍历优势在于更快找到想要查询的元素,主要用于搜索策略,最短路径(无权图) */ public void levelOrder(){ Queue<Node> q = new LinkedList<>(
阅读全文
摘要:三种遍历的打印特点: 对于每个结点,都有三次访问。 先序遍历:打印发生在第一此访问。 中序遍历:打印发生在第二次访问。 后序遍历:打印发生在第三次访问。 package com.lt.datastructure.BST; public class BST<E extends Comparable<E
阅读全文
摘要:递归:本质上是将原来的问题转化为更小的同一问题。 递归的两个步骤: 一、求解最基本问题,递归的出口 二、把原问题转化成更小的问题,构建递归过程,把最小规模的解,构建称为原问题的解 递归的代价:函数调用+系统栈空间 如果递归不处理最基本的情况,那么就会没有终止,系统栈会被占满。 示例:递归解决数组求和
阅读全文
摘要:两种方式: package com.lt.datastructure.LinkedList; /** * leetCode 203题 * /** * Definition for singly-linked list. * public class ListNode { * int val; * L
阅读全文
摘要:用链表实现栈: package com.lt.datastructure.stackqueue; /* * 使用链表实现栈 */ public class LinkedListStack<E> implements Stack<E> { LinkedList<E> list; LinkedListS
阅读全文
摘要:实现链表 package com.lt.datastructure.LinkedList; public class LinkedList<E> { //虚拟头结点 private Node dummyhead; private int size; public class Node{ public
阅读全文
摘要:package com.lt.datastructure.Array; import java.util.Stack; /** * 括号的匹配 * * 遍历字符串s,如果是左括号,入栈 * 如果当前字符是右括号,栈为空,则匹配失败 * 如果当前字符是右括号,栈不为空,将其与栈顶字符匹配,匹配不成功则
阅读全文
摘要:基于泛型数组实现: package com.lt.datastructure.Array; /** * 泛型数组 * * @param <E> */ public class Array1<E> { private E[] data; private int size; public Array1(
阅读全文
摘要:实现数组 时间复杂度: 增:O(n) 如果只对最后一个元素操作,依然是O(n),因为resize 删:O(n) 如果只对最后一个元素操作,依然是O(n),因为resize 改:已知索引O(1),未知索引O(n) 查:已知索引O(1),未知索引O(n) 无泛型 package com.lt.datas
阅读全文
摘要:单链表及其结点: 链表是一系列存储元素的单元通过指针串接起来实现的,这些单元称为结点,每个单元有两个域: 值域:用于存储数据元素 指针域:指向下一个具有相同结构的结点 因为只有一个指针结点,称为单链表 特点: 尾结点的特征是其next引用为空 链表中每个结点的next引用都相当于一个指针,指向另一个
阅读全文
摘要:/** * 顺序表,重点是数组动态扩容,插入 * 底层采用数组,长度可以动态变化,此处采用增长一倍,而java.util.ArrayList每次增长50% * int newCapacity = oldCapacity + (oldCapacity >> 1); * */ public class
阅读全文