数据结构与算法--单链表

加油,新时代打工人。

弥补对数据结构与算法的空白,先懵懵懂懂跟敲吧,不过多的文字叙述,怕误导大家,来吧链表。语言Java,需要大家Debug调试每行语句的快乐。
直接开整。
算法一:顺序表
算法二:单链表
顺序表和单链表的最大区别
循序表 查询快 增删慢
单链表 增删快 查询慢
循序表 需要扩容
单链表 不需要扩容

代码前附一张图
在这里插入图片描述

  1. 抽象增加、删除、获取的泛型类
/**
 * @author wh
 * @date 2022年01月25日18:25

 */

/**
 * 顺序表 抽象类
 * @param <E>存储的元素
 */
public abstract class Array<E> {
    /**
     *表的大小
     * @return 顺序表的长度
     */
  public abstract   int size();

    /**
     *添加一个元素
     * @param e 元素
     * @param index 要添加的位置索引
     */
  public abstract void add(E e,int index);

    /**
     * 删除一个元素
     * @param index  索引
     * @return 要删除的位置元素
     */
  public abstract E remove(int index);

    /**
     *获取指定位置的元素
     * @param index 索引
     * @return 获取一个元素
     */
  public abstract E get(int index);
}

  1. 继承抽象泛型
/**
 * @author wh
 * @date 2022年01月26日21:13
 */
public class linkList<E> extends Array<E> {

    private static class Node<E> {
        private E e;
        private Node<E> next;

        public Node(E e) {
            this.e = e;
        }
    }

    //头节点
    Node<E> hand = new Node<>(null);
    //链表长度大小
    private int size = 0;

    @Override
    public int size() {
        return size;
    }

    @Override
    public void add(E e, int index) {
        //插入第一个元素时,只能在初始0位置插入,否则异常。
        if (index > size) throw new IllegalArgumentException("非法插入位置");//位置是否合法
        Node<E> node = hand, temp;
        for (int i = 0; i < index; i++) node = node.next;
        temp = node.next;
        node.next = new Node<>(e);
        node.next.next = temp;
        size++;
    }

    @Override
    public E remove(int index) {
        //删除第一个元素时,只能在初始0位置删除,否则异常。
        if(index > size-1) throw new IllegalArgumentException("非法删除位置");//位置是否合法
        Node<E> node = hand, temp;
        for (int i = 0; i < index; i++) node = node.next;
        temp=node.next;
        node.next=node.next.next;
        size--;
        return temp.e;
    }

    @Override
    public E get(int index) {
        if(index >= size) throw new IndexOutOfBoundsException("获取下标索引越界");//位置是否合法
        Node<E> node=hand.next;
        for (int i = 0; i < index; i++) {
            node=node.next;
        }
        return node.e;
    }

}

  1. 调试运行
import sun.security.util.Debug;

/**
 * @author wh
 * @date 2022年01月25日19:07
 */
public class Main {
    public static void main(String[] args) {

        linkList<Object> objectMyArray = new linkList<>();
        objectMyArray.add("A",0);
        objectMyArray.add("B",1);
        objectMyArray.remove(0);
        System.out.println("获取"+objectMyArray.get(0)+"元素");

    }
}

  1. 最后附一张添加元素调试运行的截图
    在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello World呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值