美文网首页
线性表与顺序表

线性表与顺序表

作者: 程序员生涯 | 来源:发表于2018-12-25 03:34 被阅读0次

一、线性结构:

如果一个数据元素序列满足:

(1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素;

(2)第一个数据元素没有前驱数据元素;

(3)最后一个数据元素没有后继数据元素。

则称这样的数据结构为线性结构。

//线性表接口
public interface List {
    // 获得线性表长度
    public int size();

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

    // 插入元素
    public void insert(int index, Object obj) throws Exception;

    // 删除元素
    public void delete(int index) throws Exception;

    // 获取指定位置的元素
    public Object get(int index) throws Exception;
}
public class SequenceList implements List {

    // 默认的顺序表的最大长度
    final int defaultSize = 10;
    // 最大长度
    int maxSize;
    // 当前长度
    int size;
    // 对象数组
    Object[] listArray;

    public SequenceList() {
        init(defaultSize);
    }

    public SequenceList(int size) {
        init(size);
    }

    // 顺序表的初始化方法
    private void init(int size) {
        maxSize = size;
        this.size = 0;
        listArray = new Object[size];
    }

    @Override
    public void delete(int index) throws Exception {
        if (isEmpty()) {
            throw new Exception("顺序表为空,无法删除!");
        }
        if (index < 0 || index > size - 1) {
            throw new Exception("参数错误!");
        }
        // 移动元素
        for (int j = index; j < size - 1; j++) {
            listArray[j] = listArray[j + 1];
        }
        size--;
    }

    @Override
    public Object get(int index) throws Exception {
        if (index < 0 || index >= size) {
            throw new Exception("参数错误!");
        }
        return listArray[index];
    }

    @Override
    public void insert(int index, Object obj) throws Exception {
        // 如果当前线性表已满,那就不允许插入数据
        if (size == maxSize) {
            throw new Exception("顺序表已满,无法插入!");
        }
        // 插入位置编号是否合法
        if (index < 0 || index > size) {
            throw new Exception("参数错误!");
        }
        // 移动元素
        for (int j = size - 1; j >= index; j--) {
            listArray[j + 1] = listArray[j];
        }

        listArray[index] = obj; // 不管当前线性表的size是否为零,这句话都能正常执行,即都能正常插入
        size++;

    }

    @Override
    public boolean isEmpty() {
        return size == 0;
    }

    @Override
    public int size() {
        return size;
    }
}
public class SequenceListTest {
    public static void main(String[] args) {

        SequenceList list = new SequenceList(20);

        try {
            list.insert(0, 100);
            list.insert(0, 50);
            list.insert(1, 20);

            for (int i = 0; i < list.size; i++) {
                System.out.println("第" + i + "个数为" + list.get(i));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

测试代码输出:

第0个数为50
第1个数为20
第2个数为100

相关文章

  • 顺序表和链表的区别

    参考:线性表和链表的区别 注:参考文中的‘线性表’准确的说应该是’顺序表‘,链表与顺序表都是线性表。 顺序表:顺序...

  • 数据结构之线性表

    1、线性表-顺序表线性表-顺序表

  • 数据结构03-线性表之顺序表

    第三章 线性表之顺序表 第三章 线性表之顺序表一、什么是线性表?1> 概念2> 线性表的基本操作二、线性表的顺序存...

  • 数据结构之线性表的链式存储结构

    之前写了线性表的顺序存储结构和有序线性表的顺序存储结构,今天接着写线性表的链式存储结构 数据结构之线性表的顺序存储...

  • 数据结构-双向链表

    (一)什么是链表? 链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序...

  • 记录十一 线性表的链式存储结构

    前言 在前面记录八 线性表的顺序存储结构和记录九 线性表的顺序存储结构扩展(动态顺序表)中我们了解到线性表的顺序存...

  • 线性表及应用

    线性表 “线性表(List):零个或多个数据元素的有限序列。” 线性表的顺序存储结构 线性表的顺序存储结构,指的是...

  • 线性链表

    线性链表 线性表的顺序存储结构:顺序表线性表的链式存储结构:线性链表 线性表的链式存储所占存储空间大于顺序存储。 ...

  • 数据结构与算法--线性表的顺序存储结构

    数据结构与算法--线性表的顺序存储结构 线性表是一个序列,可以想象成一群有先后顺序的的元素集合。线性表是有限序列,...

  • 数据结构的标准形式(C、Python版本):1.顺序表

    一:C语言版本 顺序表基本操作 顺序表的定义/*****InitSize 线性表长度MaxSize 线性表允许的...

网友评论

      本文标题:线性表与顺序表

      本文链接:https://www.haomeiwen.com/subject/ujhxlqtx.html