数据结构与算法
云里飞鸟轻轻摇摆
这个作者很懒,什么都没留下…
展开
-
#简单算法知识(day1)--九九乘法表的实现
一、算法分析对于九九乘法表的算法如下所示。y(i)=i;(1<=i<=9);x(j)=j;(1<=j<=i);R(i*j)=y(i)*x(j)=i*j;二、算法的代码实现package com.yx.yzh.webtest;public class AlgorithmNineNineMulTable { public static void main(S...原创 2018-10-22 00:57:29 · 496 阅读 · 0 评论 -
源码分析篇--Java集合操作(7)自己实现一个add()方法
2.6.5 自己实现一个add()方法分析:add()方法涉及到扩容,扩容需要size(顺序表大小)、顺序表底层支持数组、默认容量大小以及默认的控元素数组四个必要属性,代码实现如下所示。package com.yzh.maven.main;/** * @className MyArrayList<E> * @description 创建一个顺序表 * @author yz...原创 2018-12-31 13:41:32 · 770 阅读 · 3 评论 -
#数据结构--用Java实现一个顺序表
一个顺序表应该具有基本的增删改查功能,它最显著的特点是能够自动扩容,底层是基于数组实现的,下面我们来自己实现一个包含基本功能的顺序表。定义MyList接口,该接口声明了顺序表功能的基本方法:package com.yzh.maven.main;public interface MyList<E> { /*** * @functionName:add * @descrip...原创 2019-01-02 02:01:29 · 493 阅读 · 0 评论 -
# 源码分析篇--Java集合操作(8)根据源码设计一个顺序表
2.6.6 get(int index)方法我们知道,顺序表中的get方法通过元素的索引获取底层数组的元素。我们可以把该方法理解为顺序表的查询操作,该方法返回元素范型类型,源代码如下所示:public E get(int index) { //范围检查rangeCheck(index);return elementData(index);}rangeCheck(index);方法...原创 2019-01-02 02:12:33 · 174 阅读 · 0 评论 -
#Java算法设计与分析1--递归算法
1.递归算法1.1递归的概念所谓递归,就是程序方法在运行过程中自身调用自身。定义如下所示。fn(){ if(递归出口条件){ return x;}else{ //some codes…return fn();}}1.2递归的使用条件1.2.1 必须要有明确的递归出口所谓递归出口就是需要有明确的结束条件。1.2.2 每次递归都要使问题的规模减小1.2.3 递归的规模...原创 2019-01-09 07:33:03 · 498 阅读 · 0 评论 -
#Java源码分析--LinkedList容器(1)
2.7.1 链表的概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作。2.7.2 链表的分类从链表的实现方式可以把链表分为单链表,循环链表,双向链表...原创 2019-05-04 18:25:42 · 152 阅读 · 0 评论 -
#Java源码分析--LinkedList容器之实现单链表(2)
2.7.4.2单链表add方法的实现2.7.4.2.1循环法但是,从上面链表添加元素的操作来看,一点也不觉得优雅,而且它将所有的节点数据信息全部暴露给外部了。在Java中,将数据信息暴露给外部已经违背它的设计特点—封装的完整性。那么,如何进行改进呢?实际上,我们可以这样考虑,由于第一个节点可以表示为头节点.getNext(),第二个节点可以表示为头节点.getNext().getNext(),...原创 2019-05-04 18:39:12 · 247 阅读 · 0 评论 -
#栈--基于链表实现栈
3.4.2.2 基于本地创建的链表实现栈package com.yzh.maven.entity;import com.yzh.maven.base.dao.MyStackDao;public class MyLinkedStack<E> implements MyStackDao<E>{ private int size; private MyDobbleL...原创 2019-05-04 19:22:43 · 300 阅读 · 0 评论 -
#数据结构--基于数组实现双端队列
4.8.4.6 源码package com.yzh.maven.entity;import java.util.ConcurrentModificationException;import java.util.EmptyStackException;import com.yzh.maven.base.abstracts.MyQueueAbstract;import com.yzh.ma...原创 2019-05-04 19:27:14 · 450 阅读 · 0 评论 -
源码分析篇--Java集合操作(6)顺序表的扩容原理
2.6.4 顺序表的扩容原理之add()方法的实现原理add()方法用于将元素动态添加到ArrayList容器中。将数据保存在list后,我们可以通过该list进行CRUD操作。我们知道,list(列表)的底层是由数组设计的,因此,数组具备了哪些优缺点,list就具备了哪些优缺点。我们知道,链表与数组是两种不同的数据结构,数据结构可以分为线性结构和非线性结构,在线性结构中,存储方式又分为连续存...原创 2018-12-31 13:35:18 · 557 阅读 · 0 评论 -
源码分析篇--Java集合操作(5)
2.6 ArrayList容器ArrayList类实现了List接口,它继承自AbstractList抽象类,继承机构如下所示:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Seri...原创 2018-12-31 13:23:37 · 158 阅读 · 0 评论 -
#简单算法知识--冒泡排序
一、算法分析算法伪代码:for1 set i = 1…n;//循环次数for2 set j = 1…n+1-i;//每轮需要比较的次数swap();//交换数据二、算法代码实现package com.yx.yzh.webtest;public class BubbleSort { public static void main(String[] args) { int[] a...原创 2018-10-22 01:58:52 · 139 阅读 · 0 评论 -
#简单算法知识--插入排序
1.1.1插入排序的原理通过上面的原理图我们可以看出,直接插入排序的基本操作是将一个记录插入到已经排好的有序表中,从而得到一个新的、记录数增1的有序表。对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直到最后一个记录插到有序序列中为止。因此,在上图中,插入排序实际上完成插入的轮数为n...原创 2018-11-10 20:03:57 · 166 阅读 · 0 评论 -
#简单算法知识--字符串逆向输出
原创 2018-11-08 03:15:38 · 277 阅读 · 0 评论 -
#简单算法知识--选择排序(与冒泡排序对比分析)
冒泡排序代码:1,-23,-6,0,34,2,87,43,-65//表示有多少轮比较 for(int i = 1;i<=arr.length-1;i++){ //表是每轮需要比较的次数 for(int j = 1;j<=arr.length-i;j++){ int temp; if(arr[j-1] > arr[j]){ //交...原创 2018-11-08 06:02:04 · 1268 阅读 · 0 评论 -
源码分析篇--Java集合操作(1)
一、集合框架1、集合框架体系图2、集合的概念 Java集合是使程序能够存储和操纵元素不固定的一组数据。 所有Java集合类都位于java.uti包中。与Java数组不同,Java集合中不能存放基本数据类型,只能存放对象的引用。但是在JDK5.0以后的版本当中,JAVA增加了“自动装箱”和“自动拆箱”的机制,比如如果要存入一个INT类型的数据,JVM会把数据包装成Integer然后再存入集合...原创 2018-12-31 12:16:12 · 174 阅读 · 0 评论 -
源码分析篇--Java集合操作(2)
4、两大集合接口在Java集合中,有两大集合,一个是Collection接口及其实现类,另一个是Map接口及其实现类。下面给出这两种集合的框架图。如下所示。4.1Collection接口框架图4.2Map接口框架图从上面两个框架图可以看出,Cllection接口和Map接口是两大顶层接口。二者最为显著的区别是:Cllection接口的实现类及其子类的元素都是单一的,不可分割的元素,而M...原创 2018-12-31 12:27:40 · 158 阅读 · 0 评论 -
源码分析篇--Java集合操作(3)
二、Collection接口Collection是一个集合顶层接口,位于java.util包下,继承了Iterable接口, public interface Collection extends Iterable { Iterable接口只有一个iterator()方法,如下所示。public interface Iterable<T> { /** * Ret...原创 2018-12-31 12:35:14 · 144 阅读 · 0 评论 -
源码分析篇--Java集合操作(4)
2、List的实现类List是一个接口,继承自Collection接口,包为java.util.*,由于继承的特性,因此,List接口具有了Collection接口的全部方法。但是,List本身又重新定义了这些方法:int size();boolean isEmpty();boolean contains(Object o);Iterator iterator();Object[] t...原创 2018-12-31 12:57:11 · 134 阅读 · 1 评论 -
#数据结构--基于双端链表实现双端队列
4.8.3.5 源码package com.yzh.maven.entity;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import com.yzh.maven.base.abstracts.MyQueueAbstract;import com.yzh.maven.base.da...原创 2019-05-04 19:29:43 · 575 阅读 · 0 评论