Java数据结构与算法 顺序表的实现

线性表:具有相同数据类型的几个元素的有限序列

顺序表:线性表的顺序存储(用内存中的连续的一块存储空间存储)

特点:按数据元素的序号进行存取,存取快,增删慢


在java语言中用接口(Interface)的形式定义线性表的ADT中的公有方法。

package Chapter_3;
//用接口的形式来定义线性表的ADT中共有方法
public interface Interface<E> {
		public void Init_List(int size);//初始化线性表,长度为size
		public int Length_List();//求线性表的当前长度
		public E Get_List(int i);//查找线性表中L中的第i个元素
		public int Locate_List(E e);//查找给定元素x在线性表中的位置
		public boolean Insert_List(int i,E e);//在线性表中值为e的元素作为第i个元素
		public int Delete_List(int i);//删除线性表中的第i个元素
		public boolean add_List(E e);
}//interface IList

顺序表作为对抽象接口的实现

package Chapter_3;

public class SeqList<T> implements Interface<T> {

	private static final int MAX_SIZE = 100;// 初始化线性表的大小
	private int last;// 线性表最后一个元素在数组中的位置
	private T[] data;// 线性表的存储空间

	// 当没有指定现线性表大小的情况下,初始化制定大小的存储空间
	public SeqList() {
		Init_List(MAX_SIZE);
	}

	// 初始化线性表
	@Override
	public void Init_List(int size) {
		data = (T[]) new Object[size];//初始化指定大小的空间
		last = -1;
	}

	@Override
	// 获取到线性表的长度
	public int Length_List() {
		// TODO Auto-generated method stub
		return last + 1;
	}

	@Override
	// 获取到指定位置的元素 并返回
	public T Get_List(int i) {
		T e = null;
		if (i < 0 || i > last + 1) {//判断位置是否合法
			System.out.print("输入的参数不在合法范围内");
			return null;
		} else
			return data[i];
	}

	/**
	 * 将指定与元素在表中的位置返回 如果存在,
	 * 返回元素的位置 如果不存在返回-1
	 */
	@Override
	public int Locate_List(T e) {
		int value = 0;
		while (value <= last && data[value] != e)//判断钙元素是否存在
			value++;
		if (value > last)
			return -1;
		    return value;
	}

	@Override
	/**
	 *将指定元素插入表的指定位置 
	 *插入成功返回true
	 *失败返回false
	 */
	public boolean Insert_List(int i, T e) {
		if(last==MAX_SIZE-1){
			System.out.print("表的存储空间已满,请扩展后插入");
			return false;
		}
		if(i<0||i>last+2){
			System.out.print("请插入到正确的位置");
			return false;
		}
		for(int j=last;j>=i-1;j--){
			data[j+1]=data[j];
		}
		data[i-1]=e;
		return true;
	}
	/**
	 * 删除线性表中的第i个元素
	 * 删除成功返回1
	 * 删除不成功返回-1
	 */
	@Override
	public int Delete_List(int i) {
		if(i<1||i>last+1){
			System.out.println("线性表中不存在该未知的元素");
			return -1;
		}
		for (int j = i-1; j<=last; j++) {
			data[j]=data[j+1];
		}
		last--;
		return 1;
	}
	/**
	 * 
	 * 添加指定元素
	 */
	@Override
	public boolean add_List(T newData) {
		data[last + 1] = newData;
		last++;
		return true;
	}

}
测试类的实现:
package Chapter_3;

public class ArrayListTest {
	public static void main(String[] args) {
		SeqList<String>  aList= new SeqList<String>();
		aList.add_List("a");
		aList.add_List("b");
		aList.add_List("c");
		aList.add_List("d");
		System.out.println(aList.Get_List(1));
		System.out.println(aList.Length_List());
		System.out.println(aList.Locate_List("c"));
		System.out.println(aList.Insert_List(2,"e"));
		System.out.println(aList.Delete_List(3));
	}
}

以上代码均本人实践所写,有任何问题,可以直接留言提问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值