在进入本次课题时,我们需要了解什么是数据结构,顺序表的概念
(一)数据结构
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]+",");
}
}
}
截图如下
以上是我对顺序表的理解,如果不足,请多多指教(*^_^*)