《大话数据结构》线性表的顺序存储结构
时间:2022-07-26
本文章向大家介绍《大话数据结构》线性表的顺序存储结构,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 什么是线性表
以前上幼儿园每当放学的时候,每个班都需要按照高矮顺序排成一列进行一起走出校门,除第一位同学以外每一个同学前面都仅有一个同学,而除了最后一个同学外每一个同学后面都仅有一个同学,当时老师让每一个同学记住自己前面和后面是谁,如果谁没来就告诉老师,这样老师就可以知道全班同学是否到都在。
同样线性表也是如此,每一个元素前后都仅有一个元素(第一个元素无前驱,最后一个元素无后继)若线性表为空时称为空表。星座就是线性表开始是摩羯座到最后结束是射手座,且他们除第一个和最后一个外都有前驱和后继。
2. 实现一个简的线性表
public class LinearTable {
// 默认数组容量为8 static final int DEFAULT_CONTAINER = 8; static int[] linearTable = new int[DEFAULT_CONTAINER]; static int index = 0;// 添加数据 static void add(int value){ linearTable[index++] = value; }
// 删除数据 static void remove(int index){ int[] newLinearTable = new int[linearTable.length-1]; for (int i = index; i < linearTable.length-1; i++) { linearTable[i] = linearTable[i+1]; }// 将老线性表的元素拷贝到新的线性表中 for (int i = 0; i < newLinearTable.length; i++) { newLinearTable[i] = linearTable[i]; } linearTable = newLinearTable; }
// 插入数据 static void insert(int value,int index){ int[] newLinearTable = new int[linearTable.length*2];// 将老线性表的元素拷贝到新的线性表中 for (int i = 0; i < linearTable.length; i++) { newLinearTable[i] = linearTable[i]; } for (int i = linearTable.length-1; i >= index; i--) { newLinearTable[i+1] = newLinearTable[i]; } newLinearTable[index] = value; linearTable = newLinearTable; }}
3.测试如下
public class MyDemo { public static void main(String[] args) { LinearTable linearTable = new LinearTable(); linearTable.add(3); linearTable.add(2); linearTable.add(1); linearTable.add(8); linearTable.add(9); for (int i : linearTable.linearTable) { System.out.print(i); } System.out.println(); linearTable.remove(2); for (int i : linearTable.linearTable) { System.out.print(i); } System.out.println(); linearTable.insert(1,2); for (int i : linearTable.linearTable) { System.out.print(i); } }}
ps:由于扩容我是把原来数组的容量扩大了两倍,所以后面会有这么多没有赋值的0,上面的东西是不是很像Java中的ArrayList,没错ArrayList实际上就是一个线性表。
线性表有哪些优缺点呢?单从代码中你就可以看出来新增的代码并不多只是需要去在数组后面加一个值就行所以时间复杂度为O(1),而插入和删除的时候是相当麻烦的,因为需要维护数组的关系,如果插入和删除刚好是当前数组有值的最后一位,那么时间复杂度为O(1),最坏的就是最第一位的时候那么就是O(n),所以线性表新增效率很高,而插入和删除效率是比较低的需要维护数组的关系。
- 无图片字体icon
- 数据结构(三):栈与队列
- 3555: [Ctsc2014]企鹅QQ
- 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
- 3097: Hash Killer I
- 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复
- 1684: [Usaco2005 Oct]Close Encounter
- 算法模板——Dinic最小费用最大流
- 算法模板——Dinic网络最大流 1
- SQL Server 使用全文索引进行页面搜索
- 2764: [JLOI2011]基因补全
- 1000: A+B Problem(NetWork Flow)
- 博弈论进阶之Multi-SG
- 2929: [Poi1999]洞穴攀行
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用java计算数组方差和标准差
- jzy3D从入门到弃坑_2 使用jzy3D0.9画2D散点图
- jzy3D从入门到弃坑_3 使用jzy3D0.9画2D散点图--多条线条
- maven安装和应用
- 论文研读-多目标自适应memetic算法
- 一起来学matlab-matlab学习笔记13函数 13_1 函数返回值
- 一起来学matlab-matlab学习笔记13函数 13_2 匿名函数
- 一起来学matlab-matlab学习笔记13函数 13_3 创建函数句柄
- matlab 单元数组和元胞数组
- matlab串联结构体,按属性创建含有元胞数组的结构体
- 一起来学matlab-matlab学习笔记6 性能剖析
- 一起来学matlab-matlab学习笔记5 低级文件输入输出函数
- 一起来学matlab-matlab学习笔记4 数据导入和导出_3 导入和导出电子数据表
- 数据导入和导出_1 MAT文件的保存和读取
- 论文研读-基于决策变量分析的大规模多目标进化算法