java模拟实现线性表及其相应操作

ADT 线性表 (List)
Data
Operation  
    void initList(*L);	//创建并初始化一个空线性表,如果成功返回true,修改表传指针   
    bool listEmpty(L);	//判断一个线性表是否为空,不修改表传值   
    void clearList(*L);	//清空一个线性表,成功返回true   
    bool getElem(L,i,*e);	//从某个位置取出元素并赋值给e(i的范围是[1,L.length]),修改e的值所以传递一个指针,成功返回true  
    int locateElem(L,e);	//查找线性表中是否有e,如果有返回它的位置(从1开始),否则返回0表示失败  
    bool listInsert(*L,i,e);	//插入一个元素e在第i个元素之前(i的取值范围是[1,L.length+1]) ,成功返回true   
    bool listDelete(*L,i,*e);	//删除在第i个位置上的元素(i的取值范围是[1,L.length]),删除的元素赋给e,成功返回true  
    int listLength(L);	//返回线性表的元素个数  
endADT

java 的实现如下

import java.util.Arrays;

public class MyArray<T> {
	//Data
	private T[] array;
	private int size;
	
	//Operation
	//不带参数初始化默认初始大小为10
	public MyArray() {
		this.array=(T[]) new Object[10];
		size=0;
	}
	//带参初始化,并将size设置为0
	public  MyArray(int capacity){
		this.array=(T[]) new Object[capacity];
		size=0;
	}
	//返回数组真实大小
	public int length(){
		return size;
	}
	//在末尾添加 如果当下数组大小=容量 则进行扩容后再添加
	public void add(T elem) {
		if(size<0||size>array.length){
			throw new IndexOutOfBoundsException("数组越界");
		}
		if (size>=array.length) {
			resize();
			System.out.println("reszie");
		}
			array[size]=elem;
			size++;
		
	}
	//扩容 数组大小=容量 则将容量扩大为原来的2倍
	public void resize() {
		T[] arrayNew=(T[]) new Object[array.length*2];
		System.arraycopy(array, 0, arrayNew, 0, array.length);
		array=arrayNew;
		
	}
	//删除指定位置元素,先进行越界判断,然后记录要删除的元素,并将之后的元素向前移动一格,数组大小减1
	public T delete(int index) {
		if(index<0||index>array.length||size<1){
			throw new IndexOutOfBoundsException("数组越界");
		}
		T res=array[index-1];
		for (int i = index-1; i < size-1; i++) {
			array[i]=array[i+1];
					
		}
		array[size-1]=null;
		size--;
		return res;
		
	}
	public void add(T elem,int index) {
		if(index<0||index>array.length||size<1){
			throw new IndexOutOfBoundsException("数组越界");
		}
		if (size>=array.length) {
			resize();
			System.out.println("reszie");
		}
		size++;
		for (int i = size-1; i >index; i--) {
			array[i]=array[i-1];
					
		}
		array[index-1]=elem;
		
		
		
	}
	@Override
	public String toString() {
		String res="[";
		for (int i = 0; i < size; i++) {
			if (i==size-1) {
				res+=array[i];
			}else {
				res+=array[i]+",";
			}
			
		}
		return res+"]";
	}
	
	
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值