Java数据结构(线性表)--线性表的顺序存储及其实现

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据结构(线性表)--线性表的顺序存储及其实现相关的知识,希望对你有一定的参考价值。

1. 线性表的顺序存储及其实现


1.1 顺序表的定义

在这里插入图片描述

所谓顺序表,就是顺序存储的线性表。顺序存储是用一组地址连续的存储单元依次存放线性表
中的各个数据元素的存储结构

1.2 顺序表的特点

在这里插入图片描述


1.3 顺序表的Java代码实现


1.3.1 线性表抽象数据类型的Java接口描述

在这里插入图片描述

IList.java

package linearTable;

/**
 * ClassName: SequenceTable
 * Description: 线性表抽象数据类型的Java接口描述
 *
 * @author Tianjiao
 * @date 2021/7/4 20:06
 */
public interface IList {
    //     将一个已经已经存在的线性表置为空表
    public void clear();

    //     判断线性表是否为空
    public boolean isEmpty();

    //     求线性表中数据元素的个数并且返回
    public int length();

    //     读取并返回线性表中的第i个数据元素
    public Object get(int i);

    //     在线性表第i个数据元素之前插入一个值为o的数据元素.
    public void insert(int i, Object o);

    //    删除线性表中下标(位序号)中第i个数据元素
    public void remove(int i);

    //    返回线性表中首次出现o的下标(位序号)
    public int indexOf(Object o);

    //    输出线性表中所有的数据
    public void display();
}

1.3.2 线性表类的实现

在这里插入图片描述

SqList.java

package linearTable;

/**
 * 顺序线性表及其基本操作
 */
public class SqList implements IList {
    private final Object[] listElem; // 线性表存储空间

    private int curLen; // 当前长度

    // 顺序表的构造函数,构造一个存储空间容量为maxSize的线性表
    public SqList(int maxSize) {
        curLen = 0; // 置顺序表的当前长度为0
        listElem = new Object[maxSize];// 为顺序表分配maxSize个存储单元
    }

    // 将一个已经存在的线性表置成空表
    public void clear() {
        curLen = 0; // 置顺序表的当前长度为0

    }

    // 判断当前线性表中数据元素个数是否为0,若为0则函数返回true,否则返回false
    public boolean isEmpty() {
        return curLen == 0;
    }


    // 求线性表中的数据元素个数并由函数返回其值
    public int length() {
        return curLen; // 返回顺序表的当前长度
    }

    // 读取到线性表中的第i个数据元素并由函数返回其值。其中i取值范围为:0≤i≤length()-1,如果i值不在此范围则抛出异常
    public Object get(int i) throws Exception {
        if (i < 0 || i > curLen - 1) // i小于0或者大于表长减1
            throw new Exception("第" + i + "个元素不存在"); // 输出异常

        return listElem[i]; // 返回顺序表中第i个数据元素
    }

    // 在线性表的第i个数据元素之前插入一个值为x的数据元素。其中i取值范围为:0≤i≤length()。如果i值不在此范围则抛出异常,当i=0时表示在表头插入一个数据元素x,当i=length()时表示在表尾插入一个数据元素x
    public void insert(int i, Object x) throws Exception {
        if (curLen == listElem.length) // 判断顺序表是否已满
            throw new Exception("顺序表已满");// 输出异常

        if (i < 0 || i > curLen) // i小于0或者大于表长
            throw new Exception("插入位置不合理");// 输出异常

        for (int j = curLen; j > i; j--)
            listElem[j] = listElem[j - 1];// 插入位置及之后的元素后移

        listElem[i] = x; // 插入x
        curLen++;// 表长度增1
    }

    // 将线性表中第i个数据元素删除。其中i取值范围为:0≤i≤length()- 1,如果i值不在此范围则抛出异常
    public void remove(int i) throws Exception {
        if (i < 0 || i > curLen - 1) // i小于1或者大于表长减1
            throw new Exception("删除位置不合理");// 输出异常

        for (int j = i; j < curLen - 1; j++)
            listElem[j] = listElem[j + 1];// 被删除元素之后的元素左移

        curLen--; // 表长度减1
    }

    // 返回线性表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1
    public int indexOf(Object x) {
        int j = 0;// j为计数器
        while (j < curLen && !listElem[j].equals(x))
            // 从顺序表中的首结点开始查找,直到listElem[j]指向元素x或到达顺序表的表尾
            j++;
        if (j < curLen)// 判断j的位置是否位于表中
            return j; // 返回x元素在顺序表中的位置
        else
            return -1;// x元素不在顺序表中
    }

    // 输出线性表中的数据元素
    public void display() {
        for (int j = 0; j < curLen; j++)
            System.out.print(listElem[j] + " ");
        System.out.println();// 换行

    }

    // 实现对顺序表就地逆置
    public void reverse() {
        for (int i = 0, j = curLen - 1; i < j; i++, j--) {
            Object temp = listElem[i];
            listElem[i] = listElem[j];
            listElem[j] = temp;
        }
    }
}


以上是关于Java数据结构(线性表)--线性表的顺序存储及其实现的主要内容,如果未能解决你的问题,请参考以下文章

Java数据结构学习笔记之一线性表的存储结构及其代码实现

数据结构(严蔚敏吴伟民)——读书笔记-2 线性表及其基本运算顺序存储结构

线性表的顺序存储结构之顺序表类的实现_Java

作业三(第四周)

数据结构之线性表之顺序存储Java实现

数据结构:「顺序表基本操作」及其「时间复杂度分析」