JAVA模拟新增顺序表及单链表

 更新时间:2020年07月09日 09:05:06   作者:咔咔kk  
这篇文章主要介绍了JAVA模拟新增顺序表及单链表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

最近在回顾大学学的数据结构,这里给大家用java模拟顺序表和单链表的新增

1顺序表新增

/**
 * 顺序表
 * 
 * @author cjd
 *
 */
public class ArrayList {
  private Object[] elementData; // 底层是一个数组,目前还没有确定长度

  private int size; // 不是数组分配了几个空间,而是元素的个数

  public ArrayList() {
    this(4);
  }

  public ArrayList(int initialCapacity) {
    elementData = new Object[initialCapacity];
  }

  // 返回线性表的大小,即数据元素的个数。
  public int size() {
    return size;
  }

  // 返回线性表中序号为 i 的数据元素@Override
  public Object get(int i) {
    return elementData[i];
  }

  // 将数据元素 e 插入到线性表中 i 号位置
  public void add(int i, Object e) {
    // 扩容 elementData = Arrays.copyOf(elementData, elementData.length*2);
    if (size == elementData.length) {//数组满了,就扩容
      Object[] elementDatanew = new Object[elementData.length * 2];//新创建一个新的数组,长度是旧数组2倍
      for (int j = 0; j < elementData.length; j++) {
        elementDatanew[j] = elementData[j];//将旧数组的数据拷贝到新数组
      }
      elementData = elementDatanew;//让elementData指向新数组
    }
    
    //最后位后移
    for(int j=size;j>i;j--){
      elementData[j]=elementData[j-1];
    }
    
    // 给数组赋值
    elementData[i] = e;
    // 元素个数+1
    size++;

  }

  // 将数据元素 e 插入到线性表末尾
  public void add(Object e) {
    this.add(size,e);//最后位新增
    

  }

  

  public String toString() {
    if (size == 0) {
      return "[]";
    }
    StringBuilder stringBuilder = new StringBuilder("[");
    for (int i = 0; i < size; i++) {
      if (i == 0)
        stringBuilder.append("" + elementData[i]);
      else
        stringBuilder.append("," + elementData[i]);
    }
    stringBuilder.append("]");
    return stringBuilder.toString();
  }

}

测试mian

public class test {
  public static void main(String[] args) {
    ArrayList list=new ArrayList();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);
    list.add(3,9);
    System.out.println("实现顺序表新增"+list.toString());
  }
}

2单链表新增

实体类

public class Node {
  Object data;//要存储的数据
  Node next;
  public Node(Object data, Node next) {
    super();
    this.data = data;
  }
  public Node() {
    super();
  }
  public Object getData() {
    return data;
  }
  public void setData(Object data) {
    this.data = data;
  }
  public Node getNext() {
    return next;
  }
  public void setNext(Node next) {
    this.next = next;
  }
}

方法

/**
   * 单链表表
   * 
   * @author cjd
   *
   */
  public class SingleLinkedList {
    private Node head = new Node();//头结点,不存储数据,为了编程方便
    private int size;//一共有几个结点

    
    // 表的大小,即数据元素的个数。
    public int size() {
      return size;
    }

    // 返回单链表中序号为 i 的数据元素
    public Object get(int i) {
      //遍历结点
      Node p=head;//找到前一个结点,从head结点开始
      for(int j=0;j<i;j++){
        p=p.next;
      }
      
      return p.data;
    }

    // 将数据元素 e 插入到单链表中 i 号位置
    public void add(int i, Object e) {
      
      //遍历结点
      Node p=head;//找到前一个结点,从head结点开始
      for(int j=0;j<i;j++){
        p=p.next;//移动指针到下一个结点
      }
      
      //新创建一个结点
      Node newNode = new Node();
      newNode.data=e;
      newNode.next=p.next;
      
      p.next=newNode;//指明新结点的直接后继结点
      
      // 个数+1
      size++;

    }

    // 将数据元素 e 插入到单链表末尾
    public void add(Object e) {
      this.add(size,e);//最后位新增
    }

    

    public String toString() {
      if (size == 0) {
        return "[]";
      }

      Node p=head.next;//找到前一个结点,从head结点开始
      StringBuilder stringBuilder= new StringBuilder("[");
      for (int i = 0; i < size; i++) {
        if (i == 0)
          stringBuilder.append("" + p.data);
        else
          stringBuilder.append("," + p.data);
        
        //移动指针到下一个结点
        p=p.next;
      }
      stringBuilder.append("]");
      return stringBuilder.toString();
    }

  }

测试类

public class test {
  public static void main(String[] args) {
  
    
    SingleLinkedList singlist=new SingleLinkedList();
    singlist.add(1);
    singlist.add(2);
    singlist.add(3);
    singlist.add(4);
    singlist.add(5);
    singlist.add(6);
    singlist.add(3,9);
    System.out.println("实现单链表新增"+singlist.toString());
    
    
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JAVA 两个类同时实现同一个接口的方法(三种方法)

    JAVA 两个类同时实现同一个接口的方法(三种方法)

    在Java中,两个类同时实现同一个接口是非常常见的,接口定义了一组方法,实现接口的类必须提供这些方法的具体实现,以下将展示如何实现这一要求,并提供具体的代码示例,需要的朋友可以参考下
    2024-08-08
  • 详解如何把Java中if-else代码重构成高质量代码

    详解如何把Java中if-else代码重构成高质量代码

    这篇文章主要介绍了详解如何把Java中if-else代码重构成高质量代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java中Optional.of()方法及源码解析(非常详细!)

    Java中Optional.of()方法及源码解析(非常详细!)

    这篇文章主要给大家介绍了关于Java中Optional.of()方法及源码解析的相关资料,Java中java.util .Optional类的of()方法用于获得该Optional类中具有指定类型的指定值的一个实例,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • IDEA 服务器热部署图文详解(On Update action/On frame deactivation)

    IDEA 服务器热部署图文详解(On Update action/On frame deactivation)

    这篇文章主要介绍了IDEA 服务器热部署详解(On Update action/On frame deactivation),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Java基础之final关键字作用案例

    Java基础之final关键字作用案例

    这篇文章主要介绍了Java基础之final关键字作用案例,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Mybatis-plus4条件构造器使用方式

    Mybatis-plus4条件构造器使用方式

    这篇文章主要介绍了Mybatis-plus4条件构造器使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • java多线程之Future和FutureTask使用实例

    java多线程之Future和FutureTask使用实例

    这篇文章主要介绍了java多线程之Future和FutureTask使用实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringCloud @FeignClient参数的用法解析

    SpringCloud @FeignClient参数的用法解析

    这篇文章主要介绍了SpringCloud @FeignClient参数的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java如何获取resources下的文件路径和创建临时文件

    Java如何获取resources下的文件路径和创建临时文件

    这篇文章主要介绍了Java如何获取resources下的文件路径和创建临时文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Java中常用输出方式(print() println() printf())

    Java中常用输出方式(print() println() printf())

    这篇文章主要介绍了Java中常用输出方式(print() println() printf()),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论