加油,新时代打工人。
弥补对数据结构与算法的空白,先懵懵懂懂跟敲吧,不过多的文字叙述,怕误导大家,来吧链表。语言Java,需要大家Debug调试每行语句的快乐。
直接开整。
算法一:顺序表
算法二:单链表
顺序表和单链表的最大区别
循序表 查询快 增删慢
单链表 增删快 查询慢
循序表 需要扩容
单链表 不需要扩容
代码前附一张图
- 抽象增加、删除、获取的泛型类
/**
* @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);
}
- 继承抽象泛型
/**
* @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;
}
}
- 调试运行
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)+"元素");
}
}
- 最后附一张添加元素调试运行的截图