线性表顺序存储结构插入和删除

本文介绍了线性表的顺序存储结构,包括如何进行数据的插入和删除。在插入时,需要检查插入位置是否合理,是否超过数组容量,并进行元素的后移。删除时,会验证删除位置,移除元素并调整后续元素的位置。同时讨论了顺序存储的优缺点,并提供了JAVA代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


线性表中的每个数据元素的类型都相同,所以一维数组来实现顺序存储


一.线性表的顺序存储结构插入数据


插入算法的思路如下:

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;
		}

	}

}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值