数据结构--------顺序存储

在进入本次课题时,我们需要了解什么是数据结构,顺序表的概念

(一)数据结构

1、什么是数据结构

数据结构是数据元素相互之间存在一种或多种特定关系(先后存储、组合、排列等)的集合

2、数据结构包含什么?

数据结构包含数据项和数据对象
数据项:一个数据元素可以由若干个数据项组成,如java Bean类中的变量
数据对象:由相同性质元素的组合,是数组的子集,如java Bean类组成的集合中的子集

3、数据结构中元素之间形成的关系分为哪2中结构关系?

逻辑结构:是指数据对象中数据元素之间的相互关系,如集合结构、线性结构、树形结构、图形结构等(宏观)
物理结构:是指数据的逻辑结构在计算机的存储形式,如顺序存储结构、链式存储结构等(微观)

(二)顺序表

1、概念

顺序表是指用一组连续的地址来依次存储线性表中的各个元素
线性表:零个或多个元素的有序序列

2、顺序表结构

在这里插入图片描述

3、增加元素

开始时顺序表中存在的元素如下
在这里插入图片描述
由于业务的需要,我们需要在存储元素6的位置(index=2)插入一个数字9,并且不改变原来存储的顺序(如下表),那么我们应该如何实现呢?
在这里插入图片描述
从上面的顺序表中,可以看出我们首先需要将原来存储元素为6的位置空闲出来,并且在这个位置中引用要插入的数字。其实实现这个操作的原理是很简单的,我们只需要将这个位置后面的元素依次从后往前后移一位,然后将插入的数据赋值给这个空间,实现的代码如下(由于只是提供思路,所以没有考虑动态改变size等变量和扩容的情况,有兴趣的话大家可以动手完善下):

public class myArray {
    private static final Object exception = "OutOfIndexException";
    private static Object[] elementData = new Object[10];
    private static int size = 5;

    private static void startAdd(){
        elementData[0] = 2;
        elementData[1] = 8;
        elementData[2] = 6;
        elementData[3] = 5;
        elementData[4] = 7;
    }

    public static Object[] copy(Object[] o1, int index, Object[] o2, int firstIndex, int num){
        if (index < 0 || index > o1.length || firstIndex+num>o2.length || firstIndex < 0 )
            return null;
        for (int i = 0; i < index; i++) {
            o2[i]= o1[i];
        }
        for (int i = firstIndex+num; i>= firstIndex; i--) {
            o2[i]=o1[i-1];
        }
        o2[index]=null;
        return o2;
    }

    public static void add(int index, Object element)  {
        if (index < 0 || index > elementData.length) System.out.println(exception);
        elementData = copy(elementData,index,elementData,index+1,size - index);
        elementData[index] = element;
    }

    public static void main(String[] args) {
        startAdd();
        System.out.print("开始时的顺序:");
        for (int i = 0; i < 5; i++) {
            System.out.print(elementData[i]+",");
        }
        System.out.println(" ");
        add(2,9);
        System.out.print("添加后的顺序:");
        for (int i = 0; i < 6; i++) {
            System.out.print(elementData[i]+",");
        }
    }
}

结果截图:在这里插入图片描述

4、删除元素

开始时顺序表中存在的元素如下
在这里插入图片描述
由于业务的需要,我们需要删除位置index为3的元素,并且不改变原来存储的顺序(如下表),那么我们应该如何实现呢?
在这里插入图片描述
其实实现这个操作的原理是很简单的,我们只需要将这个位置后面的元素依次从前往后前移一位,实现的代码如下:

public class myArray {
    private static final Object exception = "OutOfIndexException";
    private static Object[] elementData = new Object[10];
    private static int size = 6;

    private static void startAdd(){
        elementData[0] = 2;
        elementData[1] = 8;
        elementData[2] = 9;
        elementData[3] = 6;
        elementData[4] = 5;
        elementData[5] = 7;
    }

    public static void remove(int index)  {
        Object[] o = new Object[10];
        if (index < 0 || index > elementData.length) System.out.println(exception);
        for (int i = 0; i < index; i++) {
            o[i] = elementData[i];
        }
        for (int i = index; i <= size ; i++) {
            o[i] = elementData[i+1];
        }
        elementData = o;
    }

    public static void main(String[] args) {
        startAdd();
        System.out.print("开始时的顺序:");
        for (int i = 0; i < elementData.length; i++) {
            System.out.print(elementData[i]+",");
        }
        System.out.println(" ");
        remove(3);
        System.out.print("删除后的顺序:");
        for (int i = 0; i < elementData.length; i++) {
            System.out.print(elementData[i]+",");
        }
    }
}

截图如下
在这里插入图片描述

以上是我对顺序表的理解,如果不足,请多多指教(*^_^*)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值