线性表中的每个数据元素的类型都相同,所以一维数组来实现顺序存储
一.线性表的顺序存储结构插入数据
插入算法的思路如下:
1.如果插入位置不合理,则抛出异常。
2.如果线性表长度大于等于数组长度,则抛出异常或动态增加容量。
3.从最后一个元素开始向前遍历到第i个位置,分别将他们都向后移动一个位置。
4.将要插入的元素填入第i个位置。
5.线性表长加1
二.线性表顺序存储结构删除数据
删除算法的思路如下:
1.如果删除的位置不合理,则抛出异常。
2.去除待删除元素。
3.从删除元素位置开始遍历到最后一个元素位置,分别将他们都向前移动一个位置。
4.线性表长减1
线性表的顺序存储的优缺点:
代码实现(JAVA)
package com.francis.sequence;
/**
* 线性表顺序存储结构的接口
* */
public interface ISeqList<T> {
/**
* 获取线性表T中指定元素
* @param i 获取第i个元素
* @return
* */
T getElem(int i);
/**
* 向线性表T中指定位置前插入元素
* @param i 第i个位置之前插入一个元素t
* @return
* */
Boolean insertElem(int i,T t);
/**
* 删除线性表T中指定位置的元素
* @param 删除第i个元素
* @return
* */
T deleteElem(int i);
}
package com.francis.sequence;
/**
* 线性表顺序存储结构的实现
* */
public class SeqListImpl<T> implements ISeqList<T> {
public static final int MAXSIZE = 30; // 存储空间的初始化配量
private T[] data; // 数组存储数据元素
private int length; // 线性表当前长度
public SeqListImpl() {
data = (T[]) new Object[MAXSIZE];// 初始化数组
}
public T[] getData() {
return data;
}
public void setData(T[] data) {
this.data = data;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
@Override
public T getElem(int i) {
if (i < 0 || i > length) {
System.out.println("指定位置不正确");
return null;
} else
return data[i - 1];
}
@Override
public Boolean insertElem(int i, T t) {
// 表满的情况
if (length == MAXSIZE) {
System.out.println("线性表空间已满");
return false;
}
if (i < 1 || i > MAXSIZE) {// 空表情況,此時length=0,插入位置从1开始,此时i>MAXSIZE
System.out.println("插入位置不合理");
return false;
}
if (i < length) {// 非表尾
for (int j = length; j >= i; j--) {
data[j] = data[j - 1];
}
}
data[i - 1] = t;
length++;
return true;
}
@Override
public T deleteElem(int i) {
T t = data[i - 1];
if (length == 0) {
System.out.println("线性表为空表");
return null;
}
if (i < 1 || i > this.length) {
System.out.println("删除位置不合理");
return null;
} else {
for (int j = i - 1; j < length; j++) {
data[j] = data[j + 1];
}
length--;
return t;
}
}
}