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

来源:互联网 发布:ubuntu wine怎么安装 编辑:程序博客网 时间:2024/05/22 00:41

转载于:http://blog.csdn.net/qq_26411333/article/details/51809550

理解

顺序储存结构是用数组来保存数据的。用图来表示如下:
点击这里查看大图
这里写图片描述

说明:线性表也就是数组的一种特殊储存方式:从头到尾依次储存数据。

下面这种情况就不是线性表:
点击这里查看大图
这里写图片描述

插入数据

1. 线性表为空的情况

点击这里查看大图
这里写图片描述
很简单,当线性表为空时,将数据放到0的位置上就可以了

2. 插入到末尾

点击这里查看大图
这里写图片描述

说明:1和2是一种情况,都是将数据直接添加到线性表的末尾。

3. 一般情况

点击这里查看大图
这里写图片描述

说明:简单来理解,就是腾出地方,然后插入。

移除数据

1. 末尾的数据移除

点击这里查看大图
这里写图片描述

说明:很简单,直接置空就可以了。

2.一般情况

点击这里查看大图
这里写图片描述

说明:跟插入的一般操作相反,先移除,再把坑填上。

Java代码实现及演示

实现代码

以下代码是一个简单的实现

//顺序存储结构public class MyArray {    //用来保存数据的数组    private String[] arrs;    //数组的默认大小    private static final int DEFAULT_SIZE = 10;    //数组的大小    private int maxSize;    //线性表的大小    private int size;    public MyArray() {        this(DEFAULT_SIZE);    }    public MyArray(int size) {        maxSize = size;        arrs = new String[maxSize];    }    //往线性表中指定位置插入数据    public void insert(int i, String str) {        //1.参数校验        if (i < 0) {            throw new IllegalArgumentException("i不能小于0");        }        if (i > size) {            throw new IllegalArgumentException("当前线性表的大小为" + size + ",i的最大值不能超过" + size + ",i目前是" + i);        }        //2.根据情况改变数组长度        String[] newArrs;        String[] oldArrs;        if (size == maxSize) {            //数组已经满了,需要改变长度            oldArrs = arrs;            newArrs = new String[(int) (maxSize * 1.5)];            for (int j = 0; j < size; j++) {                newArrs[j] = oldArrs[j];            }            maxSize = (int) (maxSize * 1.5);            arrs = newArrs;        }        //3.插入到末尾的处理        if (i == size) {            arrs[i] = str;            size++;            look();            return;        }        //3.移动位置        for (int j = size; j > i; j--) {            arrs[j] = arrs[j - 1];        }        //4.插入数据        arrs[i] = str;        size++;        look();    }    //移除线性表指定位置上的数据    public void remove(int i) {        //1.参数校验        if (i < 0) {            throw new IllegalArgumentException("i不能小于0");        }        if (i >= size) {            throw new IllegalArgumentException("当前线性表的大小为" + size + ",i的最大值不能大于等于" + size + ",i目前是" + i);        }        //2.移除        arrs[i] = null;        //3.末尾的处理        if (i == size - 1) {            size--;            look();            return;        }        //3.一般情况的处理        for (int j = i; j < size - 1; j++) {            arrs[j] = arrs[j + 1];        }        //4.最后一位置空        arrs[size - 1] = null;        size--;        look();    }    //情况数据    public void clear() {        if (arrs != null) {            for (int i = 0; i < size; i++) {                arrs[i] = null;            }        }        size = 0;        look();    }    //查看数据    private void look() {        if (arrs != null) {            System.out.println("");            for (int i = 0; i < arrs.length; i++) {                System.out.print(" " + arrs[i]);            }        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111

插入操作演示

public class Main {    public static void main(String[] args) {        MyArray array = new MyArray(4);        array.insert(0,"1");        array.insert(1,"2");        array.insert(0,"3");        array.insert(0,"4");        array.insert(0,"5");        array.insert(3,"6");        array.insert(5,"7");        array.insert(6,"8");        array.insert(7,"9");    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

结果:

 1 null null null 1 2 null null 3 1 2 null 4 3 1 2 5 4 3 1 2 null 5 4 3 6 1 2 5 4 3 6 1 7 2 null null 5 4 3 6 1 7 8 2 null 5 4 3 6 1 7 8 9 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

移除及清空代码演示

public class Main {    public static void main(String[] args) {        MyArray array = new MyArray(4);        array.insert(0,"1");        array.insert(1,"2");        array.insert(2,"3");        array.insert(3,"4");        array.insert(4,"5");        array.insert(5,"6");        array.remove(5);        array.remove(0);        array.remove(1);        array.clear();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

结果:

1 null null null1 2 null null1 2 3 null1 2 3 41 2 3 4 5 null1 2 3 4 5 61 2 3 4 5 null2 3 4 5 null null2 4 5 null null nullnull null null null null null
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

结语

Java中,ArrayList已经进行了封装,我们直接使用就可以了。
点击这里查看ArrayList源码的相关理解