3线性结构与顺序表的实现与应用

线性结构定义
如果一个数据元素序列满足:
(1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素
(2)第一个数据元素没有前驱数据元素;
(3)最后一个数据元素没有后记数据元素
则称这样的数据结构为线性结构
线性表抽象数据类型
线性表抽象数据类型主要包括两个方面:既数据集合和该数据集合上的操作集合。
数据集合可以表示为a0,a1,a2,...an-1,每个数据元素的数据类型可以是任意的类型

操作集合包括如下:
1求元素个数
2插入
3删除
4查找
5判断是否为空

顺序表
计算机有两种基本的存储结构:顺序结构,离散结构,使用顺序结构实现的线性表成为顺序表
栈内存:顺序存储结构, 堆,离散存储结构
顺序表效率分析
(1)顺序表插入和删除一个元素的时间复杂度为O(n)
(2)顺序表支持随机访问,顺序表读取一个元素的时间复杂度为O(1)
(3)顺序表的优点是:支持随机访问,空间利用率高
(4)顺序表的缺点是:大小固定,插入和删除元素需要移动大量的数据
一List.java
//线性表接口
public interface List {
   //获得线性表长度
   public int size();
   //判断线性表是否为空
   public boolean isEmpty();
   //插入元素
   public void insert(int index,Object obj) throws Exception;
    //删除元素
   public void delete(int index) throws Exception;
   //获取指定位置的元素
   public Object get(int index) throws Exception;
}
二SequenceList.java
public class SequenceList implements List{
    
   //默认的顺序表的最大长度
   final int defaultSize =10;
   //最大长度
   int maxSize;
   //当前长度
   int size;
   //对象数组
   Object[] listArray;
   
   
   public SequenceList()
   {
      init(defaultSize);
   }
   //构造函数的重载
   public SequenceList(int size)
   {
      init(size);
   }
   
   //顺序表的初始化方法
   private void init(int size)
   {
      maxSize = size;
      this.size = 0;
      listArray = new Object[size];
   }
   
   @Override
   public void delete(int index) throws Exception {
      // TODO Auto-generated method stub
      if(isEmpty())
      {
         throw new Exception("顺序表为空,无法删除!");
      }
      if(index<0||index>size-1)
      {
         throw new Exception("参数错误!");
      }
      //移动元素
      for(int j=index;j<size-1;j++)
      {
         listArray[j]=listArray[j+1];
      }
      size--;
   }

   @Override
   public Object get(int index) throws Exception {
      // TODO Auto-generated method stub
      if(index<0||index>=size)
      {
         throw new Exception("参数错误!");
      }
      return listArray[index];
   }

   @Override
   public void insert(int index, Object obj) throws Exception {
      // TODO Auto-generated method stub
      //线性表已满
      if(size==maxSize)
      {
         throw new Exception("顺序表已满,无法插入!");
      }
      //插入位置编号是否合法
      if(index<0||index>size)
      {
         throw new Exception("参数错误!");
      }
      //移动元素
      for(int j=size;j>index;j--)
      {
         listArray[j]=listArray[j-1];
      }
      
      listArray[index]=obj;
      size++;
      
   }

   @Override
   public boolean isEmpty() {
      // TODO Auto-generated method stub
      return size==0;
   }

   @Override
   public int size() {
      // TODO Auto-generated method stub
      return size;
   }

}
三Students.java
//学生类
public class Students {

   private String sid;// 学号
   private String name;// 姓名
   private String gender;// 性别
   private int age;// 年龄
    
   public Students()
   {
      
   }
   
   public Students(String sid,String name,String gender,int age)
   {
      this.sid = sid;
      this.name = name;
      this.gender = gender;
      this.age =age;
   }
   
   public String toString()
   {
      return "学号:"+this.getSid()+" 姓名:"+this.getName()+" 性别:"+this.getGender()+" 年龄:"+this.getAge();  
   }
   
   public String getSid() {
      return sid;
   }

   public void setSid(String sid) {
      this.sid = sid;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public String getGender() {
      return gender;
   }

   public void setGender(String gender) {
      this.gender = gender;
   }

   public int getAge() {
      return age;
   }

   public void setAge(int age) {
      this.age = age;
   }

}


四Test.java文件
public class Test {

   /**
    * @param args
    */
   public static void main(String[] args) {
      // TODO Auto-generated method stub
        SequenceList list = new SequenceList(100);
        try
        {
           list.insert(list.size, new Students("S0001","张三","男",18));
           list.insert(list.size, new Students("S0002","李四","男",19));
           list.insert(list.size, new Students("S0003","王五","女",21));
           
           for(int i=0;i<list.size;i++)
           {
              System.out.println(list.get(i));
           }
           
        }
        catch(Exception ex)
        {
           ex.printStackTrace();
        }
        
   }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值