java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)
1、线性表的定义:
(1)、线性表是一种可以在任意位置插入和删除数据元素操作、由n(n≥0)个相同类型数据元素a0, a1,…, an-1组成的线性结构。除了第一个元素没有前驱元素和最后一个元素没有后继元素外,其他元素有且只有一个直接元素和一个直接后继元素。
(2)、在逻辑上,线性结构的特点是数据元素之间存在着“一对一”的逻辑关系,这种关系的数据结构通常称为线性结构;同样,任何一个线性结构都可以用线性表表示出来,只需要按照他们逻辑的顺序将它们进行排列即可。
2、线性表抽象数据类型(Java接口)
package com.gx.doem.linear;
//线性表接口List,描述线性表抽象数据类型,泛型参数T表示数据元素的数据类型
public interface List {
//线性表判空操作isEmpty():判断线性表是否为空,若为空,则返回true;否则,返回为false。
boolean isEmpty();
//获取长度
int length();
//返回第i(i≥0)个元素
T get(int i);
// 设置第i个元素值为x
void set(int i, T x);
//插入操作insert(i,x):在线性表的第i个数据元素之前插入一个值为x的数据元素。其中i的取值范围为0≤i≤length()。当i=0时,在表头插入x;当i=length()时,在表尾插入x。
void insert(int i, T x);
//在线性表最后插入x元素
void append(T x);
//删除第i个元素并返回被删除对象
T remove(int i);
// 删除线性表所有元素
void removeAll();
// 查找,返回首次出现的关键字为key元素
T search(T key);
}
3、线性表的顺序表示和实现
(1)、顺序表的存储结构:实现顺序存储结构的方法是使用数组。数组把线性表的数据元素存储在一块连续地址空间的内存单元中,这样线性表中逻辑上相邻的数据元素在物理存储地址上也相邻。数据元素间的逻辑上的前驱、后继逻辑关系就表现在数据元素的存储单元的物理前后位置上。
(2)、顺序表的存储结构如下图所示:
其中a0,a1,a2等表示顺序表中存储的数据元素,ListArray表示顺序表存储数据元素的数组,maxSize表示存储顺序表的数组的最大存储单位个数,size表示顺序表当前存储的数据元素个数。
(3)、顺表的特点:
优点:1、在线性表中逻辑上相邻的数据元素,在物理存储上也是相邻的。
2、便于随机存储。
缺点:1、存储密度高,但要预先分配“足够应用”的存储空间,这可能会造成存储空间的浪费。
2、不便于插入和删除操作,这是因为在顺序表上进行的插入和删除操作会引起大量数据元素的移动。
(4)、顺序表的操作实现(实现线性表的接口)
package com.gx.doem.linear;
public class SeqList implements LList {
//对象数组,保护成员
protected Object[] element;
//顺序表长度,记载元素个数
protected int len;
// 默认构造方法,创建默认容量的空表
public SeqList() {
this(64);
}
//构造方法,创建容量为size的空表
public SeqList(int size) {
this.element = new Object[size];
this.len = 0;
}
//判断顺序表是否空,若空返回true,否则返回false
public boolean isEmpty() {
return this.len == 0;
}
//返回顺序表长度,
public int length() {
return this.len;
}
//返回第i(≥0)个元素。若i<0或大于表长则返回null
public T get(int i) {
if (i >= 0 && i < this.len) {
return (T) this.element[i];
}
return null;
}
//设置第i(≥0)个元素值为x。若i<0或大于表长则抛出序号越界异常;若x==null,不操作
public void set(int i, T x) {
if (x == null)
return;
if (i >= 0 && i < this.len) {
this.element[i] = x;
} else {
throw new IndexOutOfBoundsException(i + ""); // 抛出序号越界异常
}
}
线性表的插入和删除
//插入数据
public void insert(int i, T x) {
if (x == null)
return;
// 若数组满,则扩充顺序表容量
if (this.len == element.length) {
// temp也引用elements数组
Object[] temp = this.element;
// 重新申请一个容量更大的数组
this.element = new Object[temp.length * 2];
// 复制数组元素,O(n)
for (int j = 0; j < temp.length; j++) {
this.element[j] = temp[j];
}
}
// 下标容错
if (i < 0)
i = 0;
if (i > this.len)
i = this.len;
// 元素后移,平均移动len/2
for (int j = this.len - 1; j >= i; j--) {
this.element[j + 1] = this.element[j];
}
this.element[i] = x;
this.len++;
}
//在顺序表最后插入x元素
public void append(T x) {
insert(this.len, x);
}
//删除
public T remove(int i) {
if (this.len == 0 || i < 0 || i >= this.len) {
return null;
}
T old = (T) this.element[i];
// 元素前移,平均移动len/2
for (int j = i; j < this.len - 1; j++) {
this.element[j] = this.element[j + 1];
}
this.element[this.len - 1] = null;
this.len--;
return old;
}
// 删除线性表所有元素
public void removeAll() {
this.len = 0;
}
个人总结:线性表包含线性表抽象数据类型、顺序表、单链表、循环单链表、循环双向链表、静态链表。今天我主要讲的是线性表的基本概念、线性表抽象数据类型、顺序表。线性表除了第一个元素没有前驱元素和最后一个元素没有后继元素外,其他元素有且只有一个直接元素和一个直接后继元素。在逻辑上,数据元素之间存在着“一对一”的逻辑关系。对于原本的数据小量和要插入的数据小量,建议使用线性表,运行效率高。对于数据大量或者插入的数据大量的时候,不建议使用。因为插入的过程中元素的位置改变很多,这样运行效率就比较低。顺序表其实和线性表差不多的,不同的是顺序表是先把数据按一定的规则排好,这样也提高了数据的查找的效率。再和大家分享最近发生在我身边的一个小故事,我有一个朋友她和我说,“还有一周时间就要考试了,可她对自己一点信心都没有”。然后,我就回复她,从现在开始把所有的精力都放在复习上,全力以赴的对待这件事情。可是意外的是她居然还留一个上午的时间去做别的事情,谁都没有想到一个完全没有信心的人,在考试的过程中。就差那么一点点,就离成功的边缘就差那么一点点。如果当初她再努力一点点,如果当初听我的把所有精力放在这次考试上,可能结果就不会和现在那样。出于孟子的“鱼,我所欲也,熊掌亦我所欲也;二者不可得兼,舍鱼而取熊掌者也。”其实这句话想告诉我们的是“不是说二者必然不可兼得,而是强调当如果不能兼得的时候,我们应当如何取舍。”
java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)相关推荐
- java数组删除元素_java中删除 数组中的指定元素方法
java中删除 数组中的指定元素要如何来实现呢,如果各位对于这个算法不是很清楚可以和小编一起来看一篇关于java中删除 数组中的指定元素的例子. java的api中,并没有提供删除数组中元素的方法.虽 ...
- java删除数组中指定元素_java学习中如何删除数组中的指定元素
java的api中,并没有提供删除数组中元素的方法.虽然数组是一个对象,不过并没有提供add()remove()或查找元素的方法.这就是为什么类似ArrayList和HashSet受欢迎的原因. 不过 ...
- python 删除列表中的指定元素
python 删除列表中的指定元素 def delete_list(list1,ele):"""删除列表中的指定元素:param list1:原列表:param ele: ...
- php js动态删除数组元素,javascript如何删除数组中的指定元素
js删除数组中的指定元素主要分为两步,首先判断数组中是否包含这个元素,然后再通过splice()方法来删除指定元素 本篇文章主要介绍的是如何通过javascript语言对数组中的指定元素进行删除的方法 ...
- Python 集合06 discard()方法—删除集合中的指定元素
discard()方法-删除集合中的指定元素 文章目录 discard()方法-删除集合中的指定元素 1.语法要点 2.实操练习 (1)删除的元素在集合中 (2)删除集合中不存在的元素,discard ...
- js remove 当前元素_详解js删除数组中的指定元素
本篇文章将会给大家介绍两种删除数组中的指定元素的方式,分别为: 1.单独定义一个的函数,通过函数来删除指定数组元素. 2.为Array对象定义了一个removeByValue的方法,在调用方法来删除指 ...
- 删除数组中某个指定元素或删除数组中某个对象元素
ES6--删除数组中某个指定元素或删除数组中某个对象 1.删除数组中某个指定元素 2.删除数组中的某个对象 1.删除数组中某个指定元素 let index = this.array.indexOf(n ...
- java 线性表的表示和实现_线性表中顺序表的的理解和实现(java)
线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像.通常,称这种存储结构的线性表为顺序表.特点是:逻辑上相邻的数据元素,其物理次序上也 ...
- Java数据结构与算法_线性表_顺序表与链表
文章目录 线性表 顺序表 顺序表API设计 顺序表的代码实现 链表 单向链表 双向链表 总结 线性表 概述 线性表是最基本.最简单.也是最常用的一种数据结构. 一个线性表是n个具有相同特性的数据元素的 ...
最新文章
- 2019年上半年收集到的人工智能Python编程干货文章
- BZOJ1444: [Jsoi2009]有趣的游戏(Trie图,矩乘)
- 通俗讲解分布式锁,看完不懂算我输
- PHP排序算法之快速排序
- 阿里云企业邮箱POP3、SMTP和IMAP服务器地址和端口号对照表
- java swing 有哪些_一个经典的java swing gui设计(几乎包含所有常用的控件及布局)
- 小红书引流推广的终极秘籍之笔记排名
- 一起来学习Java浮点类型
- 【疑难杂症】matplotlib绘图是设置中文字体为宋体
- 适合写笔记的文本笔记管理工具——Keep It for Mac!
- “千年虫问题”、“2038年问题”、什么是闰年
- ThinkPHP3.2 框架sql注入漏洞分析(2018-08-23)
- TigerGraph Cloud 使用,以及Python的链接操作
- 用matlab画x开立方,SWAT模型中气象数据库和土壤数据库的构建方法.pdf
- IDEA tomcat热部署
- html点击自动复制功能,html5页面如何实现点击复制的功能
- SRM系统能为企业带来什么好处,企业该怎么选择SRM系统供应商
- 设计原则之依赖倒置原则的概念及实例代码操作
- 将大量有规律txt文本数据转换成xml格式,在导入excel,生成excel文件,在导入spass中,对数据进行分析
- redis高可用几种方案
热门文章
- 自媒体视频剪辑中的素材都是在哪里找的?
- miui12.5 最简单快捷root刷面具+线刷降级+卡米解决教程(测试机小米10至尊版)
- android手机酷狗缓存,酷狗音乐(com.kugou.android) - 10.6.5 - 应用 - 酷安
- 我的一次java培训经历
- 蓝牙spc 5.2新特性总结-LE Audio
- Vue.js使用流程
- 基于微服务的 Real DevOps 实践
- 高中数学40分怎么办_高三数学40分怎么提高 零基础逆袭的方法
- C语言——指针(进阶版)
- UI设计学习--PPI、DPI、PX、DP