顺序表的JAVA实现

本文详细介绍了一种基于数组的线性表实现方法,并提供了一系列基本操作,包括添加、插入、删除、定位、获取元素等。通过具体示例,展示了如何使用此类线性表进行数据管理和操作。

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

package ADT;

public interface ILinarList<E> {
    boolean add(E item);//添加
    boolean add(int i,E item);//插入
    E remove(int i);//删除
    int indexOf(E item);//定位
    E get(int i);//取表
    int size();//长度
    void clear();//清空
    boolean isEmpty();//是否为空
}

package ADT;
import java.lang.reflect.Array;
import java.util.Scanner;

public class SeqList<E> implements ILinarList<E> {
     private int  maxsize;
     private E[] data;
     private int size;
	@SuppressWarnings("unchecked")
	public  SeqList(Class<E> type ,int maxsize) {
		// TODO Auto-generated constructor stub
		this.maxsize=maxsize;
		data = (E[])Array.newInstance(type, maxsize);
		size = 0;
	}
	//添加
	@Override
	public boolean add(E item) {
		// TODO Auto-generated method stub
		if(!isFull()){
			data[size++] = item;
			return true;
		}else 
		return false;
	}
	//是否为满
	private boolean isFull() {
		// TODO Auto-generated method stub
		if(size == maxsize){
			return true;
		}else {
			return false;
		}
		
	}
	//插入
	@Override
	public boolean add(int i, E item) {
		// TODO Auto-generated method stub
		if(i<0 || i>size){
			throw new IndexOutOfBoundsException("Index:" +i + ",Size:" + size);
		}
		if(!isFull()){
			for(int j = size-1;j>=i;j--){
				data[j+i] = data[j];
			}
			data[i] = item;
			size++;
			return true;
		}else {
			return false;
		}
		
	}
	//删除
	@Override
	public E remove(int i) {
		// TODO Auto-generated method stub
		rangeCheck(i);
		if(!isEmpty()){
			E oldValue = data[i];
			for(int j = i; j<size-1;j++){
				data[j] = data[j+1];
			}
			data[--size] = null;
			return oldValue;
		}else{
			return null;
		}
	
	}
	//定位
	@Override
	public int indexOf(E item) {
		// TODO Auto-generated method stub
		if(item == null){
			for(int i = 0;i<size;i++)
				if(data[i] == null)
					return i;
			}else {
				for(int i = 0;i<size;i++)
					if(item.equals(data[i]))
						return i;
			}	
		return -1;
	}
		
	//取表
	@Override
	public E get(int i) {
		// TODO Auto-generated method stub
		rangeCheck(i);		
		return data[i];
	}
	//判断是否出现超界
	private void rangeCheck(int i) {
		// TODO Auto-generated method stub
		if(i<0 || i>=size){
			throw new IndexOutOfBoundsException("Index:" +i + ",Size:" + size);
		}
	}
	//长度
	@Override
	public int size() {
		// TODO Auto-generated method stub
		return size;
	}
	//清空
	@Override
	public void clear() {
		// TODO Auto-generated method stub
		for(int i = 0;i<size;i++){
			data[i] = null;
			size =0;
		}
	}
	//是否为空
	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub		
		return size ==0;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
     ILinarList<Integer> list = new SeqList<Integer>(Integer.class, 50);
     int data[] = {1,2,3,4,5};
     Scanner sc = new Scanner(System.in);
     System.out.println("--------------------------------------------------------");
     System.out.println("操作选项菜单");
     System.out.println("1,添加");
     System.out.println("2,插入");
     System.out.println("3,删除");
     System.out.println("4,定位");
     System.out.println("5,取表");
     System.out.println("6,显示");
     System.out.println("0,退出");
     System.out.println("--------------------------------------------------------");
     char ch;
     do{
         System.out.println("操作选项");
         ch = sc.next().charAt(0);
    	 switch (ch) {
    	case '1':
    		for(int i = 0;i<data.length;i++ ){
    			list.add(data[i]);
    		}
    		System.out.println("添加成功");
    		break;
    	case '2':
    		   System.out.println("输入添加位置:");
    		   int loc = sc.nextInt();
    		   System.out.println("输入插入值:"); 
    		   int num = sc.nextInt();
    		   list.add(loc-1, num);
    		
    		System.out.println("插入成功");
    		break;
    	case '3':
 		   System.out.println("输入删除位置:");
 		    loc = sc.nextInt();
 		    list.remove(loc-1);
 		   System.out.println("删除成功");
 		   break;
    	case '4':
 		   System.out.println("输入查找Item:");
 		    num = sc.nextInt();
 		   System.out.println(num + "位置为:" + (list.indexOf(num) + 1)); 
 		   break;
    	case '5':
 		   System.out.println("输入元素位置:");
 		    loc = sc.nextInt();
 		   System.out.println(loc + "元素为:" + list.get(loc-1)); 
 		    break;
		case '6':
		     System.out.println("输出线性表的元素:");
		     for(int i =0 ; i<list.size();i++){
		         System.out.print(list.get(i) +" ");
		     }
		     System.out.println();
			break;
    	 }
		}while(ch != '0' );
			sc.close();
     
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值