顺序表(可变容)

本文详细介绍了顺序表(Sequence List)的概念,包括其在计算机内存中的数组形式存储和逻辑结构的映射。重点展示了Java代码实现,涉及构造方法、清空、判断空、长度获取、元素访问、插入、删除操作,以及如何通过`resize`方法管理数组容量。

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

概念:

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存 储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元 素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
代码实现:
public class SequenceList<T> implements Iterable<T>{

	private T[] eles;
	private int N;
//	构造方法
	public SequenceList(int capacity) {
		this.eles=(T[])new Object[capacity];
		this.N=0;
	}
//	将线性表清空
	public void Clear() {
		N=0;
	}
//	判断当前线性表是否为空表
	public boolean isEmpty() {
		return N==0;
	}
//	获取线性表的长度
	public int length() {
		return N;
	}
//	获取指定位置的元素
	public T get(int i) {
		return eles[i];
	}
//	向线性表添加元素t
	public void insert(T t) {
		if(N==eles.length) {
			resize(2*eles.length);
		}
		eles[N++]=t;
	}
//	在列表的i位置上插入元素t
	public void insert(int i,T t) {
		if (i<0 || i>N){ 
			throw new RuntimeException("插入的位置不合法");
			}
		//元素已经放满了数组,需要扩容 
		if (N==eles.length){ 
			resize(eles.length*2);
			}
		for(int index=N;index>i;index--) {
			eles[index]=eles[index-1];
		}
		eles[i]=t;
		N++;
	}
	
	public T remove(int i) {
		
		if (i<0 || i>N-1){
			throw new RuntimeException("当前要删除的元素不存在");
			}
		T current=eles[i];
		for(int index=i;index<N-1;index++) {
			eles[index]=eles[index+1];
		}
		N--;
		//当元素已经不足数组大小的1/4,则重置数组的大小
		if(N<eles.length/4) {
			resize(eles.length/2);
		}
		return current;
	}
	//查找t元素第一次出现的位置
	public int indexOf(T t) {
		for(int i=0;i<N;i++) {
			if(eles[i]==t) {
				return i;
			}
		}
		return -1;
	}
//	重新设置线性表容量的大小
	public void resize(int newsize) {
		T[] tem=eles;
		eles=(T[])new Object[newsize];
		for(int i=0;i<N;i++) {
			eles[i]=tem[i];
		}
	}
	public Iterator<T> iterator(){
		return new SIterator();
	}
	public class SIterator implements Iterator{
		private int cutor;
		public SIterator(){
			this.cutor=0;
		}
		@Override
		public boolean hasNext() {
			return cutor<N;
		}

		@Override
		public Object next() {
			return eles[cutor++];
		}
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luck&Strive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值