算法——顺序表(1)

简介: 算法——顺序表(1)

🟡前言


21天挑战赛的第二周,本文主要讲述有关顺序表的内容


活动地址:CSDN21天学习挑战赛


🟡概述


线性表是最简单、最基本的数据结构,其特点如下:


  • 第一个数据元素没有前驱,这个数据元素被称为头结点


  • 最后一个数据元素没有后继,这个数据元索被称为尾结点


  • 除了第一个和最后-个数据元素外,其他数据元素有且仅有一个前驱和一个后继


🟡顺序表的API设计


1️⃣构造方法


SequenceList(int capacity)


2️⃣成员方法


  • 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元素第一次出现位置


3️⃣成员变量


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

491f83806980476799bc70bf279c9835.png


🟡结语


本文只是简单实现了一下顺序表,接下来会进行优化


相关文章
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
6月前
|
存储 缓存 算法
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
55 0
|
2月前
|
算法
【顺序表】算法题 --- 力扣
【顺序表】算法题 --- 力扣
|
2月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
32 0
|
4月前
|
存储 算法
【数据结构与算法】顺序表
【数据结构与算法】顺序表
26 0
【数据结构与算法】顺序表
|
4月前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
34 0
|
5月前
|
存储 算法
顺序表经典算法
顺序表经典算法
|
6月前
|
存储 机器学习/深度学习 算法
【数据结构与算法】:手搓顺序表(Python篇)
【数据结构与算法】:手搓顺序表(Python篇)
|
6月前
|
存储 算法 C++
【数据结构与算法】:带你手搓顺序表(C/C++篇)
【数据结构与算法】:带你手搓顺序表(C/C++篇)