线性表java

本文详细介绍了线性表的概念、特点和基本操作,包括初始化、插入、删除、查找、获取和更新等。重点讲解了线性表的顺序存储表示,通过Java代码展示了如何实现一个顺序表类,包括插入、删除、查找等操作。此外,还提供了遍历、求表长和清空表的方法。
摘要由CSDN通过智能技术生成

线性表的概念

线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。
线性表可逻辑地表示为(a1,a2,…,ai-l,ai;,ai+l,…,an)

a1是唯一的第一个数据元素,又称表头元素;an是唯一的“最后一个”数据元素,又称表尾元素.除第一个元素外,每个元素有且仅有一个直接前驱.除最后一个元素外,每个元素有且仅有一个直接后继

线性表的特点

  • 表中元素的个数有限
  • 表中元素具有逻辑上的顺序性,表中元素有其先后次序
  • 表中元素都是数据元素,每个元素都是单个元素
  • 表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间
  • 表中元素具有抽象性,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容

线性表是一种逻辑结构,表示元素之间一对一的相邻关系

线性表的基本操作

  • 初始化: 构造一个空的线性表
  • 插入: 在线性表的第i个位置之前插入一个新元素
  • 删除: 删除线性表中的第i个数据元素
  • 查找: 找出线性表中满足特定条件的元素的位置
  • 获取: 取线性表中的第i个数据元素*
  • 更新: 取线性表中的第i个数据元素,检查或更新其中某个数据项的
  • 内容判空: 判断当前线性表是否为空
  • 求长度: 求出线性表中数据元素的个数
  • 正序遍历: 依次访问线性表中每个元素并输出
  • 销毁: 销毁一个已存在的线性表

线性表的顺序表示

线性表的顺序存储又称顺序表。它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。第1个元素存储在线性表的起始位置,第i个元素的存储位置后面紧接着存储的是第i+1个元素,称i为元素a在线性表中的位序

假设线性表L存储的起始位置为LOC(A),sizeof(ElemType)是每个数据元素所占用存储空间的大小,则表L所对应的顺序存储如图

在这里插入图片描述

public class  SequenceList<T>{
    private T[] listArray;
    final int maxSize=10;
    private  int length;
    public SequenceList(){
        length=0;
       listArray=(T[])new Object[maxSize];
    }
    // 初始化
    public SequenceList(int n){
        if (n<=0){
            System.out.println("出现错误!");
            System.exit(1);
        }
        length=0;
        listArray=(T[])new Object[maxSize];
    }
    // 判空
    public boolean isEmpty(){
        return length==0;
    }
    // 插入新元素
   public  boolean add(T obj,int   pos){
       if(pos<1||pos>length+1){
             System.out.println("pos值不合法");
            return false;
            }
       if(length==listArray.length){
             T[] p=(T[])new object[length*2];
             }
        for(int  i=0;i<length;i++){
             p[i]=listArray[i];
             listArray=p;
             }
         for(int i=length;i>=pos;i--){
             listArray[i]=listArray[i-1];
             listArray[pos-1]=obj;
              length++;
              return true;
             }
}
// 删除元素
public T remove(int i)
{	//在顺序表中删除第i个元素并返回其值,i的合法值为1<=i<=this.length
	if(i<1||i>this.length)  return null; //i值不合法,返回null
	T x = this.listArray[i-1];
  for(int j=i; j<this.length; j++)
		this. listArray[j-1] = this. listArray[j]; 
		//被删除元素之后的元素向前移一个位置
	this.length--; 	//表长减1
	return x;
} 
}
// 查找元素
public int find(T obj)
{ //查找第1个与obj相等的元素的位序,返回其位序,若不存在则返回0。
		for(i=0;i<this.length;i++) 
			if(obj.equals(this.listArray[i]) ) 
				return i+1;
		return 0;
} 
public T get (int  i)
{ //返回第i个元素,若i<1或i>this.length,返回null
 	if(i<1||i>this.length) {
	     System.out.println(“i值不合法”)	;
	     return null; }  //i值不合法,返回null
 	return this.listArray[i-1];//将第i个元素返回,其下标为i-1
}
public boolean set( T obj, int i)
{//将第i个元素设置为obj,1<=i<=this.length
	if(i<1 || i>this.length)   //位序不合法
	  return false;
	this. listArray[i-1] = obj;
          return true;
}
// 求表长
public int size()
{	return this.length;
}
// 遍历
public void  traverse()
{	for(int i=0;i<this.length; i++)
         System.out.print(this.listArray[i]+”  ”);
}
// 清空表
public void clear()
{	this.length=0;
}

}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值