数据结构
wjianchen13
软件工程师
展开
-
映射
映射 存储(键,值)数据对的数据结构(key,value) 根据键(key),寻找值(value) 可以使用链表或者二分搜索树实现 使用链表实现映射 定义Map的接口: void add(K key, V value); V remove(K key); boolean contains(K key); V get(K key); void set(K key, V newValue); int getSize(); boolean isEmpty(); LinkedListMap.java p原创 2020-06-03 22:41:20 · 209 阅读 · 0 评论 -
集合
结合介绍 集合,就是承载元素的容器,集合有个特点是每个元素只能存在一次,集合的这个特点能够非常快速地帮助我们完成一些去重的工作。 在这里可以考虑使用二分搜索树实现集合,因为二分搜索树不能存放重复元素,能够非常好地实现集合的底层数据结构。 下面是定义结合数据结构接口所需要实现的操作方法: void add(E e); boolean contains(E e); void remove(E e); int getSize(); boolean isEmpty(); 集合最重要的性质,不能添加重复元素。原创 2020-06-03 08:39:02 · 143 阅读 · 0 评论 -
二分搜索树
树结构本身是一种天然的组织结构,比如我们常见的文件夹结构,还有类似图书馆里面的图书分类等等,还有比如我们公司的职能部门。 二叉树的特点 1. 将数据使用树结构存储后,出奇地高效 2. 二叉树和链表一样,是动态数据结构 3. 二叉树具有唯一的根节点 4. 二叉树每个节点最多有两个孩子 5. 二叉树没给接地那最多有一个父亲 6. 二叉树具有天然递归结构 二分搜索树 二分搜索树是二叉树,其每个节点的值大于其左子树的所有节点的值,小于其右子树的所有节点的值。二分搜索树存储...原创 2020-06-02 21:29:25 · 158 阅读 · 0 评论 -
java 递归
什么是递归 本质上,将原来的问题,转化为更小的同一问题,递归实际上也和普通函数调用一样,只不过调用的是函数自身。 满足递归的2个条件: 1. 自身调用,通过自身调用来逐步缩小问题的规模 2. 递归出口,存在一种简单条件,能够让该方法退出 合理地使用递归能够大大简化我们的程序代码,但是递归调用也是有代价的:函数调用会使用系统栈空间,频繁的函数调用会给系统栈空间带来额外的开销。 下面是递归使用的2个例子 1. 数组求和 public class Sum { public s...原创 2020-05-09 00:05:22 · 1515 阅读 · 0 评论 -
java 使用链表实现队列
这里首先实现了一个自定义的列表,这个列表有以下特点: 1. 使用head标记头结点,使用tail标记尾结点 2. 由于在尾部删除节点,需要查找删除节点前一个元素,所以尾部删除节点需要从前向后遍历 3. 实现队列应该在尾部插入元素,头部删除元素 完整代码: Queue.java public interface Queue<E> { int getSize...原创 2020-05-06 09:02:43 · 262 阅读 · 0 评论 -
java 链表实现栈
由于栈是先入后出的,使用链表的方式实现栈,时间复杂度都是O(1),以下是一个链表实现栈的例子: LinkedListStack.java public class LinkedListStack<E> implements Stack<E> { private LinkedList<E> list; public LinkedListS...原创 2020-05-06 09:00:47 · 350 阅读 · 0 评论 -
java 链表
这是这段时间学习链表的笔记和总结。 链表是一种线性数据结构,实现真正的动态数据结构,链表是一种比较简单的动态数据结构。 链表Linked List LinkedList的数据以节点为单位,其中一个节点应该包括当前存储的内容以及下一节点的引用,如果不存在下一节点,则下一节点引用为空。 链表的优点是真正实现动态存储,不需要处理固定容量的问题,需要添加节点直接new一个新的节点,再把它添加到链表...原创 2020-04-29 00:33:22 · 158 阅读 · 0 评论 -
Java 队列 (Queue)
这是这段时间学习队列的笔记和总结。 概述 队列是一种先进先出的数据结构(FIFO),就是第一个元素进去,第一个现出来。 queue的主要操作 boolean add(E var1); // 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian 异常(抛出异常,不建议使用) boolean offer(E var1); // 添加一个元素并返回true 如果队列已满...原创 2020-04-27 00:12:41 · 937 阅读 · 0 评论 -
java 数组
这是这段时间学习数组的一个笔记和总结。 数组概述: 声明一个数组就是在内存空间中划出一串连续的空间,数据具有以下特点: 1.数组名代表的是连续空间的首地址 2.通过首地址可以依次访问数组所有元素 3.元素在数组中的排序叫做下标从零开始 4.数组可以看成是多个相同数据类型数据的组合,对这些数据的统一管理。 5.数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员...原创 2020-04-25 12:48:31 · 173 阅读 · 0 评论 -
java 栈(stack)
stack介绍 Stack继承自Vector。底层是通过数组实现的,栈是线程安全的。 栈只能从一端添加元素,也只能从一端取出元素,这一端称为栈顶 栈的操作: push() 入栈 pop() 出栈 peek() 查看栈顶元素,不弹出栈 search() 栈顶到该元素首次出现的位置的距离 empty() 栈是否为空 private static void testStack() { St...原创 2020-04-23 23:59:26 · 444 阅读 · 0 评论