数据结构-线性表-顺序表的代码详解

数据结构中的一大重点   线性表:

一。顺序表  
   数据存储是连续的,有多少数据开辟多少储存空间,所以不存在资源浪费  

   查找速度快,但是在增删数据的时候可能会移动大量数据,所以增删操作速度慢

二。链表
   数据存储是离散的,所以数据的存储不连续,无规则,可能存在空间大于数据数目,浪费资源  

   但是增加跟删除元素的时候不影响其他元素,速度快

   根据划分条件不同:

   链表结构可分为单向链表,双向链表   循环链表 非循环链表

三。这篇文章详解顺序表!!!!!!代码在最后附上!!!!

 1.代码部分 一包    一接口二类  在学习过程中可以对着左侧行序号更改代码

      

 2.接口类List

3.顺序表类SequenceList

3.测试类

4.运行结果

5.代码部分附上:

List类:

package LinearList;

//定义一个线性表接口
public interface List {
    //定义线性表的长度
    public int Size();
    //判断线性表是否为空
    public boolean IsEmpty();
    //插入元素
    public void Insert(int index,Object object) throws Exception;
    //删除元素
    public void Delete(int index) throws Exception;
    //查找元素
    public Object FindData(int index) throws Exception;
}
 

SequenceList类

package LinearList;


public class SequenceList implements LinearList.List{
    
    
    //设置顺序表默认的最大长度
    final int DefaultSize = 20;
    //设置顺序表的最大长度
    int Maxsize;
    //设置顺序表的当前长度
    int size;
    //存储对象的数组(因为不知道存储的是哪种类型的数据,所以选择object)
    Object OjbArr[];
    
    //初始化顺序表
    public void Init(int size) {
        //设置顺序表长度
        Maxsize = size;
        //设置完之后将顺序表当前的长度size设置为0,因为还未输入数据
        this.size = 0;
        //根据长度实例化对象数组数目
        OjbArr = new Object[size];    
    }
    
    //构造函数,默认最大长度下的构造函数和用户输入最大长度下的构造函数
    //构造函数中创建该表
    public SequenceList() {
        // TODO Auto-generated constructor stub
        Init(DefaultSize);
    }
    public SequenceList(int size) {
        Init(size);
    }
    

    @Override
    //返回顺序表的长度
    public int Size() {
        // TODO Auto-generated method stub
        return size;
    }

    @Override
    //返回对顺序表的判断是否为空
    public boolean IsEmpty() {
        // TODO Auto-generated method stub
        //通过判断当前顺序表的size是否为0   以此判断该顺序表是否为空
        return size == 0;
    }

    @Override
    public void Insert(int index, Object object) throws Exception {
        // TODO Auto-generated method stub
        //判断该表是否已经存满
        if(size>=Maxsize) {
            throw new Exception("该表已经存满");
        }
        //判断插入数据的位置是否合法
        if(index<size||index>Maxsize) {
            throw new Exception("插入位置不合法");
        }
        
        //若上述进程没有被打断,则证明该插入操作是没问题的,继续正常进行
        
        //当前长度++
        size++;    
        //移动元素让出位置使该元素插入
        //移动的原理是将所插位置元素以后的元素全部后移,让出这个位置给新来元素
        for(int j=size;j>=index;j--) {
            OjbArr[size+1] = OjbArr[size];
        }
        //元素加入index位置
        OjbArr[index] = object;    
    }

    @Override
    public void Delete(int index) throws Exception {
        // TODO Auto-generated method stub
        //判断顺序表是否为空,为空没法进行删除操作
        if(IsEmpty()) {
            throw new Exception("该顺序表为空");
        }
        //判断是否有该位置
        if(index<0||index>size) {
            throw new Exception("没有该位置");
        }
        //元素前移顶掉index处的元素
        for(int j=index;j<=size-1;j++){
            OjbArr[j]=OjbArr[j+1];
        }
        //顺序表长度--
        size--;
        
        
    }

    @Override
    public Object FindData(int index) throws Exception {
        // TODO Auto-generated method stub
        //判断顺序表是否为空,为空没法进行查找操作
        if(IsEmpty()) {
            throw new Exception("该顺序表为空");
        }
        //判断是否有该位置
        if(index<0||index>size) {
            throw new Exception("没有该位置");
        }
        
        return OjbArr[index];
    }
        
}
 

 

测试类Test

package LinearList;

public class Test {
    
   public static void main(String args[]) {
       //创建一个顺序表对象
       SequenceList list = new SequenceList(20);
       //为顺序表插入数据
       try {
           //增加
        list.Insert(0, 11);
        list.Insert(1, 22);
        list.Insert(2, 33);
        list.Insert(3, 44);
        
        //删除
        list.Delete(1);
        
        //查找
        for(int i=0;i<list.Size();i++) {
            System.out.println("第"+i+"个元素为"+list.FindData(i));
        }
    
        
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
   }
}
 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表是一种常见的数据结构,它表示具有相同数据类型的一组元素的有序序列。线性表中的元素之间存在一种顺序关系,每个元素都有一个前驱和一个后继(除了第一个元素没有前驱,最后一个元素没有后继)。线性表可以用顺序存储结构或链式存储结构实现。 在顺序存储结构中,线性表的元素按照顺序存储在连续的内存空间中,可以通过元素的下标来访问和操作元素。插入或删除元素时,需要移动其他元素,因此操作的时间复杂度较高。 链式存储结构中,线性表的每个元素都包含一个数据域和一个指针域,指针指向下一个元素。通过指针的链接,元素可以按照任意顺序存储在内存中,插入和删除操作只需要改变指针的指向,因此时间复杂度较低。 线性表常见的操作包括插入、删除、查找、获取长度等。其中插入和删除操作需要注意保持线性表的顺序关系。 常见的线性表有数组、链表、栈和队列。数组是最简单的线性表,通过下标可以直接访问元素;链表是动态存储结构,插入和删除操作方便,但访问元素需要遍历链表;栈是一种特殊的线性表,只允许在表的一端进行插入和删除操作;队列也是一种特殊的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。这些数据结构在实际应用中都有各自的应用场景和优缺点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值