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());

    }
}

原文地址:https://www.cnblogs.com/hzcjd/p/12169156.html

时间: 2024-10-24 22:34:51

JAVA模拟顺序表新增,模拟单链表新增的相关文章

小猪的数据结构辅助教程——2.2 线性表中的单链表

小猪的数据结构辅助教程--2.2 线性表中的单链表 标签(空格分隔): 数据结构 本节学习路线图与学习要点 学习要点: 1.理解顺序表以及单链表各自的有点以及缺点! 2.熟悉单链表的形式,对于头指针,头结点,尾结点,数据域和指针域这些名词要知道是什么! 3.熟悉单链表的结点结构 4.区分头指针与头结点! 5.熟悉创建单链表的两种方式:头插法和尾插法 6.了解单链表12个基本操作的逻辑 7.有趣的算法题:查找单链表的中间结点~ 1.单链表的引入(顺序表与单链表的PK) 2.单链表的结构图以及一些名

线性表 及Java实现 顺序表、链表、栈、队列

数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至少在一段时间之后,技术可以很快得到提高.同时,它也是软考的重点,我们需要对这部分的内容进行一下总结. 我们先看一下数据结构和算法的整体内容. 1.线性表 概念: 数据元素的排列方式是线性的. 分类: 分类规则是根据上图中元素的存储结构来划分的. (1)顺序表 基本思想:元素的存储空间是连续的.在内

线性表之循环单链表

#include<iostream> using namespace std; struct LinkNode { int value; LinkNode* next; }; LinkNode* createRoundLinkList() { LinkNode* head = (LinkNode*)malloc(sizeof(LinkNode)); head->next=head; head->value=0; return head; } bool insertElem(int

Java实现顺序表

利用顺序存储结构表示的顺序表称为顺序表. 它用一组连续的地址存储单元一次存放线性表中的数据元素. 顺序表的实现是数据结构中最简单的一种. 由于代码中已经有详细注释,代码外不再阐述. 下次再陈上关于顺序表的循环队列和顺序栈的代码. 1 package 线性表.顺序表.普通数组; 2 3 /** 4 * ArrayList 顺序表 5 * JAVA 3.0 6 * 抛异常处理错误的下标 7 * 使用泛型,当然如果要替换成Object也是可以替换 8 */ 9 public class ArrayLi

java实现顺序表结构

package com.hephec; import java.util.Arrays; public class SequenceList<T>{ //以指定长度的数组来创建顺序线性表 //@param element 指定顺序线性表中的第一个元素 //@param initSize 指定顺序线性表底层数组的长度 private int DEFAULT_SIZE = 16; //保存数组的长度 private int capacity; //定义一个数组用于保存顺序线性表的元素 privat

数据结构——Java实现顺序表

一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 2.销毁顺序表 3.清空顺序表 4.检测顺序表是否为空 5.返回顺序表的元素个数 6.返回顺序表中指定位置元素的值 7.返回顺序表中第一个与指定值相同的元素的位置 8.返回指定元素的直接前驱 9.返回指定元素的直接后继 10.向指定位置插入元素 11.删除指定位置的元素 12.遍历顺序表 在Java

Java 3:顺序表的操作

顺序表常见操作有插入.删除.查找.修改.一.插入:1.插入有头插.尾插.任意位置插入.在插入时要注意下标的取值在顺序表长度范围内.所以最好在插入之前进行扩容操作.2.在头插时要注意先将原数组的元素从后往前依次向后移动.因为如果从前往后开始移动的话,会造成后一个元素被前一个元素覆盖,而丢失数据且造成重复.arr[i+1]=arr[i],注意此处i的意思是要移动的元素的下标.3.任意位置插入与头插类似,从后往前(要插入的位置元素下标)依次向后移动,再将数据插入二.删除1.删除有头删.尾删.任意位置删

(java实现)顺序表-ArrayList

什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入内存,中间没有一点空隙. 基本操作 每个数据结构都有集合对数据处理的方法,这能让我们更方便的使用保存在数据结构中的数据.顺序表的基本操作有:增(add),删(remove),改(set),查(find),插(insert)等. 在这里我们只详细讲解remove 和 insert 操作,其他实现可看下

Java算法 -- 顺序表

顺序表结构定义:就是按照顺序存储方式存储的线性表 1 1.定义一个顺序表的基本数据: 2 3 static final int MAXLEN = 100; 4 5 Class Student{ 6 private String number; //学生学号 7 private String name; // 学生姓名 8 private int age; // 学生年龄 9 } 10 11 Class SLT{ 12 Student[] ListData = new Student[MAXLEN