21天挑战赛的第二周,本文主要讲述有关顺序表的内容
活动地址:CSDN21天学习挑战赛
线性表是最简单、最基本的数据结构,其特点如下:
第一个数据元素没有前驱,这个数据元素被称为头结点
最后一个数据元素没有后继,这个数据元索被称为尾结点
除了第一个和最后-个数据元素外,其他数据元素有且仅有一个前驱和一个后继
SequenceList(int capacity)
public void clear()
:将一个线性表置为空表
public boolean isEmpty()
:判断当前线性表是否为空表
public int length()
:获取线性表的长度
public T get(int i)
:获取当前索引对应元素
public void insert(int i, T t)
:向线性表中索引值为i处添加元素t
public void insert(T t)
:向线性表中添加元素t
public T remove(int i)
:删除i处元素值,并返回该元素
public int indexOf(T t)
:查找t元素第一次出现位置
private T[] eles
:存储元素的数组private int N
:当前线性表的长度public class SequenceList<T>{
private T[] eles;
private int N;
//构造方法
SequenceList(int capacity){
eles = (T[])new Object[capacity];
N = 0;
}
//将一个线性表置为空表
public void clear(){
N = 0;
}
//判断当前线性表是否为空表
public boolean isEmpty(){
return N == 0;
}
//获取线性表的长度
public int length(){
return N;
}
//获取当前索引对应元素
public T get(int i){
if(i < 0 || i >= N){
throw new RuntimeException("当前元素不存在");
}
return eles[i];
}
//向线性表中索引值为i处添加元素t
public void insert(int i, T t){
if(i == eles.length){
throw new RuntimeException("当前表已满,无法插入元素");
}
if(i < 0 || i > N){
throw new RuntimeException("插入的位置不合法");
}
//将索引值为i及其以后的元素依次向后移动,空出索引值为i的位置
for(int index = N; index > i; index--){
eles[index] = eles[index - 1];
}
eles[i] = t;//将t元素放在索引值为i的位置上
N++;//修改顺序表长度
}
//向线性表中添加元素t
public void insert(T t){
if(N == eles.length){
throw new RuntimeException("当前表已满,无法添加元素");
}
eles[N++] = t;
}
//删除i处元素值,并返回该元素
public T remove(int i){
//判断要删除的元素是否在顺序表内
if(i < 0 || i > N){
throw new RuntimeException("删除元素不存在");
}
//记录i处元素值
T result = eles[i];
//将元素顺序向后移位
for(int index = i; index < N-1; index++){
eles[index] = eles[index+1];
}
N--;//改变线性表长度
return result;//返回当前元素值
}
//查找t元素第一次出现位置
public int indexOf(T t){
if(t == null){
throw new RuntimeException("查找的元素不合法");
}
for(int i = 0; i < N; i++){
if(eles[i].equals(t)){
return i;
}
}
return -1;
}
}
public class SequenceListTest {
public static void main(String[] args) {
SequenceList<String> s1 = new SequenceList<>(10);
//测试插入
s1.insert("张三");
s1.insert("李四");
s1.insert("王五");
//测试获取
s1.insert(1,"老六");
String getResult = s1.get(1);
System.out.println("索引1处的结果为:" + getResult);
//测试删除
String removeResult = s1.remove(2);
System.out.println("删除的元素是:" + removeResult);
//测试清空
s1.clear();
System.out.println("清空后元素个数为:" + s1.length());
}
}
本文只是简单实现了一下顺序表,接下来会进行优化