大学数据结构之顺序表的实现(Java版本)

本文介绍了如何使用Java语言实现数据结构中的顺序表,针对大学数据结构课程中的内容进行重写,旨在帮助学习者掌握Java实现数据结构的方法。作者承诺会逐步分享所有数据结构的Java实现,并承诺对读者的问题进行解答。

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

相信大家在大学学习数据结构的时候大学的教材大多数是采用C语言版本实现的吧!那么大家有没有考虑过如何用Java语言来实现这些数据结构呢?关注我,我将持续把所有的数据结构都用Java重新写一遍,希望能对想学好的同学们有所帮助!
有疑问的可以留言或者私信,看到了就会一一解答的。

package sequenceList;

import java.util.Iterator;

public class SequenceList<T> implements Iterable<T>{   //iterate :重复,反复
//存储元素的数组
	private T[] eles;
	//记录当前顺序表中元素的个数
	private int N;	
	
	//构造方法
	public SequenceList(int capacity){
		//初始化数组
		this.eles=(T[])new Object[capacity]; //new一个object类型的数组然后强转成T类型数组
		//初始化长度
		this.N=0;
	}
	
	//将线性表置为空表
	public void clear(){
		this.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(eles.length*2);
		}
		eles[N++]=t;          //每添加一个元素,N(线性表长度)的值会自增一个
	}
	
	//在i处插入元素t
	public void insert(int i,T t){
		if(N==eles.length){        //如果元素个数等于数组长度,就代表无法添加元素,需要扩容
			resize(eles.length*2);
		}
		//先把i索引处极其后面的元素依次向后移动一位
		for(int index=N;index>i;index--){
			eles[index]=eles[index-1];	
		}
		//再把t元素放到i索引处即可
		eles[i]=t;
		//元素个数+1
		N++;
	}
	
	//删除指定索引i处的值,并返回该元素
	public T remove(int i){
		//记录索引i处的值
		T current=eles[i];
		//索引i后面的元素依次向前移动一位即可
		for(int index=i;index<N-1;index++){
		eles[index]=eles[index+1];
		}
		//元素个数也应该-1
		N--;
		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].equals(t)){
				return i;
			}
		}
		return -1;
	}
	
	//根据参数newsize重置eles的大小
	public void resize(int newsize){
		//定义一个临时数组
		T[] temp=eles;
		//创建新数组
		eles=(T[])new Object[newsize];  //强制转换
		//把原数组的数据拷贝到新数组即可
		for(int i=0;i<N;i++){
			eles[i]=temp[i];
		}
	}

	@Override                 //该方法使得sequence也能支持foreach循环
	public Iterator<T> iterator() {         
		// TODO Auto-generated method stub
		return new SIterator();     //返回内部类对象
	}
	private class SIterator implements Iterator{
        private int cusor;    //eles的指针
        public  SIterator() {
			// TODO Auto-generated constructor stub
        	this.cusor=0;
		}
		@Override
		public boolean hasNext() {                 //判断当前容器中还有没有下一个元素
			// TODO Auto-generated method stub
			return cusor<N;
		}

		@Override
		public Object next() {      //获取当前容器中的下一个元素
			// TODO Auto-generated method stub
			return eles[cusor++];
		}
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值