线性表——顺序表
线性表
线性表:n(n>=0)个数据元素组成的一个有限序列,可以在任意位置进行插入和删除操作的线性数据结构。
从数据在物理内存存储形式上线性表可分为:顺序表和链表
从上图可以看出:
线性表中数据与数据之间存在一对一的关系,即除第一个元素和最后一个元素外,每个元素都有唯一的直接前驱和唯一的直接后继,第一个元素没有前驱,最后一个元素没有后继
顺序表
顺序表:用一段地址连续的存储单元依次存储数据元素的线性结构。(地址连续的空间,一般情况下采用数组)
Java内存中,栈内存和堆内存占了很大一部分空间位置:栈内存的存储是连续的,堆内存的存储是离散的。
下面我们将完成基于静态数组的顺序表(默认数组元素为整型元素)的以下基本操作:
1、置空表
2、判断线性表是否为空
3、求取线性表的长度
4、任意位置插入元素
5、获取指定位置的元素
6、删除并返回指定位置的元素
7、返回指定元素首次出现的位置,如不含该元素返回-1
8、输出该顺序表
顺序表的实现
Step1:设计线性表整型数据类型的java接口

1 package struct; 2 3 //线性表的接口 4 public interface LinearList { 5 6 //置空表 7 public void clear(); 8 9 //判断线性表是否为空 10 public boolean isEmpty(); 11 12 //求取线性表的长度 13 public int size(); 14 15 //任意index位置插入整型元素obj 16 public void insert(int index,int obj) throws Exception; 17 18 //获取第index位置的元素 19 public int get(int index) throws Exception; 20 21 //删除并返回第index个元素 22 public void delete(int index) throws Exception; 23 24 //返回指定元素首次出现的位置,如不含该元素返回-1 25 public int indexOf(int obj); 26 27 //输出该线性表 28 public void display(); 29 30 }
然后让子类实现该接口即可。
Step2:设计顺序表类

1 package struct; 2 3 public class ArrayList1 implements LinearList{ 4 5 //线性表存储空间(整型数组) 6 private int[] listArray; 7 8 //当前长度 9 private int size; 10 11 //顺序表构造函数,构造一个存储容量为maxSize的线性表 12 public ArrayList1(int maxSize){ 13 //将顺序表当前长度置为0 14 size = 0; 15 //为顺序表分配maxSize个存储单元 16 listArray= new int[maxSize]; 17 } 18 19 //将一个已经存在的线性表置为空表 20 public void clear(){ 21 size = 0;//将顺序表的当前长度置为0 22 } 23 24 //判断顺序表是否为空 25 public boolean isEmpty() { 26 return size==0;//若size=0则该表为空表,返回true 27 } 28 29 //求取线性表的长度 30 public int size() { 31 return size;//当前长度即为该线性表的长度 32 } 33 34 //获取表中第index个元素 35 public int get(int index) throws Exception { 36 if(index <0||index>size-1){ 37 //输如的index值不在该顺序表的范围内,抛出异常 38 throw new Exception("第"+"【"+index+"】"+"个元素不存在"); 39 }else{ 40 //返回该元素 41 return listArray[index]; 42 } 43 } 44 45 //任意位置插入元素obj 46 public void insert(int index,int obj)throws Exception{ 47 if(size == listArray.length){ 48 //size达到设定该顺序表的最大长度,则表满,抛出异常 49 throw new Exception("顺序表已经满了"); 50 } 51 if(index < 0||index > size){ 52 //要插入的元素不在该顺序表的范围内,抛出异常 53 throw new Exception("输入参数异常"); 54 } 55 //移动元素 56 else{ 57 for(int i = size-1;i>index;i--){ 58 listArray[i+1]=listArray[i]; 59 } 60 //不论当前顺序表size是否为0,此语句都可执行 61 listArray[index] = obj; 62 //改变顺序表的长度 63 size++; 64 } 65 } 66 67 //删除指定位置的元素 68 public void delete(int index) throws Exception{ 69 if(isEmpty()){ 70 //判断是空表的情况 71 throw new Exception("无法对空顺序表进行删除此操作"); 72 } 73 if(index < 0 || index > size-1){ 74 //判断输入参数的合法性 75 throw new Exception("输入参数错误"); 76 }else{ 77 for(int j = index;j<size;j++){ 78 listArray[j] = listArray[j+1]; 79 } 80 } 81 //改变数组的大小 82 size--; 83 } 84 85 //获取第一次出现指定元素的下标 86 public int indexOf(int obj) { 87 int k = 0; 88 //while循环判断每个元素是否与指定的元素相等 89 while(k<size&&!(listArray[k]==(obj))){ 90 k++; 91 } 92 if(k<size){ 93 return k; 94 }else{ 95 return -1; 96 } 97 } 98 99 //顺序表的输出 100 public void display(){ 101 System.out.print("顺序表序列为:"); 102 for(int x =0;x<size;x++){ 103 System.out.print(listArray[x]+" "); 104 } 105 System.out.println(); 106 } 107 108 }
Step3:测试类

1 package struct; 2 3 public class Test { 4 5 public static void main(String[] args) throws Exception{ 6 ArrayList1 list = new ArrayList1(10); 7 list.insert(0, 3); 8 list.insert(1, 2); 9 list.insert(2, 3); 10 list.insert(3, 2); 11 list.insert(4, 3); 12 list.insert(5, 2); 13 list.display(); 14 int i = list.get(1); 15 System.out.println("要获取的指定元素为:"+i); 16 list.delete(1); 17 list.delete(4); 18 list.display(); 19 int j = list.indexOf(2); 20 System.out.println("指定元素2第一次出现的下标为:"+j); 21 int k = list.size(); 22 System.out.println("list的长度为:"+k); 23 list.clear(); 24 int m = list.size(); 25 System.out.println("清空后list的长度为:"+m); 26 } 27 28 }
运行结果如下图:
分类:
数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了