线性表——顺序实现java

Java实现线性表的顺序存储 好多天过去了,也是因为刚入职不久,租了房子买家具等等,一直静不下心来,到现在才写第二篇博客,这一次主要是线性表的顺序存储实现,下一篇是线性表的链式存储实现。 线性表的概念已经有很多人发过了,我也是看着这一篇《线性表的基本概念》学的,所以概念就不多概述了,大家要是对线性表不清楚的可以先看这篇。不过里面使用的是C语言进行阐述的,我主要使用Java语言,并且会把全部代码上传(虽然很简单但是我还是想全部... 阅读详情
线性结构的特点:在数据元素的非空有限集中,(1)存在唯一第一个被称作“第一个”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个之外,集合中的每个数据元素均只有一个前去;(4)除最后一个之外,集合中每个数据元素均只有一个后继。
线性表是最常用且最简单的线性结构。
线性结构分为两种变现形式:顺序表示和链式表示
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表中的数据元素。
顺序表示:便于随机存取,但是实现插入、删除操作时就要移动大量的元素
链式表示形式:逻辑上相邻的元素,其物理存储位置则不一定相邻。便于插入删除元素,但是在存取方面需要从头到位的遍历
顺序表示和链式表示的比较:
1.读写方式:顺序表可以顺序存取,也可以随机存取;链表只能从表头顺序存取元素;
2.逻辑结构与物理结构:顺序存储时,逻辑上相邻的元素其对应的物理存储位置也相邻;链式存储时,逻辑上相邻的元素,其物理存储位置则不一定相邻;
3.查找、插入和删除操作:
  按值查找,当线性表在无序的情况下,两者的时间复杂度均为o(n);而当顺序表有序时,可采用折半查找,此时时间复杂度为o(log n);
  按位查找,顺序表支持随机访问,时间复杂度为o(1);而链表的平均时间复杂度为o(n)。
  顺序表的插入和删除操作平均需要移动半个表长的元素;链表的插入、删除操作时,只需修改相关节点的指针即可。
4.空间分配:顺序存储一般是基于静态存储分配,一单存储空间装满就不能扩充;链式存储的节点空间只有在需要的时候申请分配,只要内存有足够的空间即可分配。
Java实现线性表的顺序表示,写这点代码费了一个多小时,真心觉得对不起自己,数据结构这么多年一直是软肋大哭 代码测试完成,要是有什么不对的,请各位大神赐教!奋斗
package linelist;
//线性表的顺序实现方式 泛型指的是该线性顺序表中存储的数据类型
public class ArrayList<T> 
{
	//设置线性表的默认长度
    final int defaultSize =0;
    //线性表的最大长度
    int maxSize;
    //线性表的当前长度
    int length;
    //存储线性表的数组
    Object [] arryList;
    /*
     * 构造函数
     * @param 构建顺序表的时候需要把线性表的长度作为参数传递进来
     */
    public ArrayList (int size)
    {
    	//初始化线性表
    	initList(size);
    }
    /*
     * 初始化顺序表的方法
     * @param size 指定需要建立的顺序表的长度
     */
    public void  initList(int size)
    {
    	if (size<0) {
    		//当传递过来的线性表长度小于0的时候抛出异常
			throw new RuntimeException("顺序表的长度不能小于0");
		}else {
			this.maxSize =size;
			this.length =0;
			this.arryList =new Object[size];
		}
    	
    }
    /*
     * 获取表长的方法
     */
    public int getLength()
    {
    	int num=0;
        
    	 
    		for (int i = 0; i < maxSize; i++) {
    			 
				if(arryList[i]!=null)
				{
					num++;
				}
    		}
    		return num;
    	 
     
    	
    }
    /*
     * 按值查找
     * 返回元素在顺序表中的下标
     */
    public int getIndexByValue(Object e)
    {
    	for (int i = 0; i < getLength(); i++) {
			if(e==arryList[i])
			{
				return i;
			}
		}
    	//如果该元素不存在则返回-1
    	return -1;
    	 
    }
    /*
     * 查找指定下标位置下的元素值
     */
    public Object getValueByIndex(int i)
    {
    	if(i<maxSize&&i>=0)
    	{
    		return arryList[i];
    	}else {
    		//如果输入下标小于0或者不小于线性表的最大长度则抛出异常
			throw new RuntimeException("输入下标有误");
		}
    	
    }
    /*
     * 在指定下标位置插入元素
     */
    public void insertByIndex(int index,Object elem)
    {
    	Object preTemp,reTemp;
    	if(index>=0&&index<this.getLength()+1)
    	{
	       

    		if(this.getLength()+1<maxSize)
    		{
    	       
    	        
    			//要插入位置上原来的数据
    			preTemp =arryList[index];
    			//插入目标值
    			arryList[index]=elem;
    			//插入位置之后的值集体后移一位
    			for(int i=index+1;i<=this.getLength();i++)
    			{
    				//下面这三行实现前后两个位置数的交换
    				reTemp=arryList[i];
    				arryList[i]=preTemp;
    				preTemp =reTemp;
    				 
    			}
    				
    		}else {
				throw new RuntimeException("顺序表中元素已满,不能再进行插入!");
			}
    	}else {
			throw new RuntimeException("输入的顺序表下标不对");
		}
    	
    }
    /*
     * 删除指定位置上数据
     * 
     */
    public void deleteByIndex(int index) {
    	if(index>=0&&index<this.getLength())
    	{
    		for (int i = index; i < arryList.length-1; i++) {
				arryList[i]=arryList[i+1];
			}
    	}else {
			throw new RuntimeException("输入的下标有误!");
		}
		
	}
    /*
	 * 修改指定位置的元素为指定数据
	 */
    public void updateElemByIndex(int index,Object elem)
    {
		if (index>=0&&index<this.getLength())
		{
			arryList[index]=elem;
		}else {
			throw new RuntimeException("输入下标有误!");
		}
	}
    /*
     * 判空
     */
    public boolean isEmpty()
    {
    	return (getLength()==0)?true:false;
    }
    /*
     * 删除顺序表
     */
    public void destroyList()
    {
    	this.length=0;
    	this.maxSize =0;
    	this.arryList =null;
    }
    //空表的简单初始化
    public void init(Object...objects)
    {
    	if(isEmpty())
    	{
    		for(int i=0;i<objects.length;i++)
    		{
    			arryList[i]=objects[i];
    		}
    		
    	}else {
			throw new RuntimeException("非空表不能使用这种初始化方法");
		}
    }
}


线性表顺序表示及实现源码 线性表的顺序表示和实现源码。 Blog: http://blog.youkuaiyun.com/algorithm_only 立即下载

相关推荐

顺序线性表的java实现代码

顺序存储结构线性表的java实现代码,要在jdk1.6以上环境下运行

3. java线性表(顺序表、链表、栈、队列)

线性表是一种经典的数据结构,它遵循线性逻辑结构的特点。 数据元素之间具有“**一对一**”的逻辑关系。 第一个数据元素没有前驱,这个数据元素被称为**头结点**。 最后一个数据元素没有后继,这个数据元素被称为**尾节点**。除了第一个数据元素和最后一个数据元素外,其余的数据元素有且仅有唯一前驱和后继。前驱元素:若元素A在B元素的前面,则A为B的前驱元素。后继元素:若元素B在元素A的后面,则B为A的后继元素。

kuxiaoyang的博客 1954

Zemax光机热集成分析:从FEA数据导入到光学性能评估实战

在精密光学系统设计中,环境温度变化和机械应力是导致像质恶化的关键因素,这涉及到光、机、热多物理场的耦合分析。其核心原理在于,通过有限元分析(FEA)软件(如ANSYS)模拟热与力学载荷下的结构变形和温度分布,并将这些物理场数据精准映射到光学设计软件(如Zemax)中,以评估其对调制传递函数(MTF)、点列图等核心光学指标的影响。这项技术的工程价值在于,它使设计从静态的理想模型跃升至动态的工程现实,能够在设计阶段就预测并补偿环境扰动,从而显著提升光学系统在航空航天、车载镜头、高功率激光等严苛工况下的可靠性与稳

weixin_30565327的博客 356

线性表java实现

通过数组实现,查询直接根据索引(index)查询,效率比较高;增删的效率比较低,因为需要大量的移动元素的位置,一旦创建,长度固定,当长度等于数组长度时,如果想要再插入数据就需要扩容处理。...

qq_41044209的博客 1493

使用QGIS提取天地图遥感影像中的建筑物轮廓,及AI方案

用QGIS的插件提取遥感影像中的建筑轮廓,并提供了几个AI提取建筑轮廓的方案。

cky_123的博客 2万+

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

构建一个带 GPU 支持的深度学习开发镜像;使用 PyTorch 2.5.1(CUDA 12.4)环境;发布并托管 Docker 镜像至 Docker Hub;验证 GPU 环境正常运行!🎉 这将极大提升你的项目部署效率,尤其是在多人协作或跨平台部署场景中。

用大模型重构生活:猫奴程序员的AI智能日常记录 1579

Java实现顺序线性表

使用Java语言实现线性表之顺序表

qq_51560486的博客 1097

STM32芯片解锁读写保护:更改Option Byte [Error已解决]

解锁读保护:STLink更改Option Byte 变Level从1变为0,点击Apply即可。(程序执行读保护,其实是将Level从0变为1) 默认情况下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节(Option Bytes)中的配置。 RDP读保护级别 级别0,无保护, 级别1,使能读保护, 这种保护下,若使用调试功能(使用下载器、仿真器)或者从内部SRAM自举时都不能对内部FLASH及备份SRAM作任何访问(读写、擦除都被禁止); 当芯片处于级别1的时候,可以把选项字节

HowieXue 薛永浩的博客 2万+

java 线性表_线性表的Java实现

一、概念对于常用的数据结构,可分为线性结构和非线性结构,线性结构主要是线性表,非线性结构主要是数和图。当n>0时,表可表示为:(a0,a1,a2,a3,…an)1、 线性表的特征:1、存在唯一的被称作”第一个”的数据元素2、存在唯一的一个称作”最后一个的”数据元素”3、除第一个之外,集合中的每个数据元素均只有一个前驱4、除最后一个之外,集合中每个元素均只有一个后继2、线性表的基本操作1、初始...

weixin_42635064的博客 924

04 HCM CPI SF集成-员工集成(一)

将员工主数据和组织数据从SAP Successfactors Employee CentraI复制到SAPERP或SAP S/4HANA,SAP SF CPI HCM集成

SAP CPI 146

【WRF数据准备】制备月尺度静态地理数据:LAI、Fpar、LUCC

【WRF数据准备】制备月尺度静态地理数据:LAI、Fpar、LUCC

WW、forever的博客 803

【java数据结构】线性表(顺序表及链表)及其实现

01 引入: 多项式的表示 方法一:顺序结构直接表示(数组) 方法二:顺序存储结构存储非零项 方法三: 链表结构存储非零项 02 什么是线性表 线性表”:由同类型数据元素构成有序序列的线性结构 表中元素个数称为线性表的长度 线性表没有元素时,称为空表 表起始位置称为表头,表结束位置称表尾 说明:线性表也就是数组的一种特殊储存方式:从头到尾依次储存数据。 2.1 线性表抽象数据类型概述 线性表操作接口描述 public...

DempseyLee的博客 1962

华为OD机试真题 新系统【优化充电桩调度算法】

华为OD机试 新系统真题【优化充电桩调度算法】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【优化充电桩调度算法】

qq_45776114的博客 756

线性表的顺序实现-java

java的实现相对C语言,只是分配内存的方式不同。C语言用malloc,而java用new。 这里只是使用int数组做一个简单的实现,并没有太严谨。 废话不多说,直接上代码: /** * 线性表的顺序实现 * * @author mkii */ public class SeqList { // 默认数组容量 private final static int DEFA...

mkii_hong的博客 554

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 243

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

顺序线性表的java实现

线性表是由n个数据元素a1,a2,a3……an组成的有限序列,线性表的顺序存储结构是指用一组地址连续的存储单元依次存放线性表的元素。 换句话说,线性表的顺序存储结构中数据元素的物理关系和逻辑关系是一致的。 为了使用顺序存储结构实现线性表,程序通常会采用数组来保存线性表中的数据元素。 下面是一个简单的用java语言编写的顺序线性表的源代码: package Algorithms; impo

小楼一夜听春雨 1223

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

顺序线性表 java_顺序线性表的java实现

线性表是由n个数据元素a1,a2,a3……an组成的有限序列,线性表的顺序存储结构是指用一组地址连续的存储单元依次存放线性表的元素。换句话说,线性表的顺序存储结构中数据元素的物理关系和逻辑关系是一致的。为了使用顺序存储结构实现线性表,程序通常会采用数组来保存线性表中的数据元素。下面是一个简单的用java语言编写的顺序线性表的源代码:package Algorithms;import java.ut...

weixin_30774211的博客 303

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

用Java实现线性表的顺序存储结构

本文使用Java实现线性表的顺序存储结构,虽然Java提供了动态数组ArrayList,但是自己动手做做上不一样的,欢迎交流想法! 一、源代码 在Eclipse中新建一个Java project,包括两个java源文件,SqList.java和SqListTest.java。 /**  * 线性表的动态分配顺序存储结构  *   * @author YangYong  *  */

翱翔云端的专栏 4389

java 线性表排序_Java实现顺序线性表

import java.util.Arrays;public class SequenceList {private int DEFAULT_SIZE=16;//保存数组的长度private int capacity;//定义一个数组用于保存顺序线性表的元素private Object[] elementData;//保存顺序表中元素的当前个数private int size=0;public S...

weixin_34396941的博客 285

Java实现线性表之顺序表

顺序表的Java实现 线性表 线性表是一种相当简单灵活的数据结构,是我们学习数据结构的基础。线性表中的元素存在一对一的关系。例如,将学生按学号进行先后顺序的排列。 线性表可以用顺序存储和链式存储,顺序存储适合进行多次访问,而链式存储适合多次插入和删除。 顺序表 顺序储存结构就是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。 数据元素 新建一个类来封...

qq_42200733的博客 1182

线性表--顺序实现方式 (JAVA)

我们知道线性表结构一般分为三种:顺序线性表、单链表、双链表。下面将会使用    java语言实现顺序表。使用数组作为容器。            基于线性表的三种结构的操作都是一样的我们设计一个线性表接口。 package comkiritor.linear_table; /**  * 线性表接口  * @author Kiritor  * */ public interfac

LCore的专栏 2590

【数据结构】线性表的顺序储存结构(java实现)

首先新增元素。我们只需要找到顺序表的最后一个元素,然后再最后一个元素新增元素即可。新增完后,顺序表的长度要加1。因此这里写了usedSize++但是要注意。如果新增元素的时候数组正好满了怎么办?因此我们需要判定数组是否满了,如果满了我们需要去扩容整个数组。判定数组是否已满的思路很简单:当线性表的长度等于数组长度的时候,就满了。扩容。我们扩容的时候就用到了Arrays中的函数copyof,这里实现了两倍扩容。//如果满了得扩容}}// 判断线性表是否为满。

m0_49425260的博客 824

java线性表删除的流程图_线性表顺序存储结构插入和删除的实现 java

本章主要是对线性表的顺序存储结构进行总结。(借助了《大话数据结构这本书》,对于跨专业进入IT的建议可以看看这本书)在开篇首先介绍一些简单的概念。一 什么是线性表(List)?零个或多个数据元素的有限序列。二 线性表从存储结构上可以分为那两种?(1)顺序存储结构(2)链式存储结构三 什么是线性表的顺序存储结构?用一段地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储示意图: 对于顺序存储结...

weixin_36128990的博客 907

数据结构之线性表:顺序线性表 Java 实现(底层基于数组)

代码实现 package top.gldwolf.java.datastructure.lineartable; /** * 顺序线性表 * @param <T> 存储的元素类型 */ public class LinearTable<T> { private static final int INITIAL_SIZE = 20; // 线性表的初始容量 ...

Gldwolf的博客 307

线性表的顺序存储及JAVA实现

线性表是线性结构的典型代表 线性表是一种罪基本、最简单的数据结构,数据元素之间仅有单一的前驱和后继关系。线性表不仅具有广泛的应用,而且也是其他数据结构的基础。 线性表的定义   线性表是n个具有相同类型的数据元素的有限序列。数据元素的个数称为线性表的长度。长度等于零是称为空表。  线性表的数据元素具有抽象的数据类型,在设计具体的应用程序时,数据元素的抽象类型将被具体的数据类型所取代。 线

zh23862691的专栏 1013

数据结构之线性表之顺序存储Java实现

文章目录线性表的定义线性表的基本运算线性表的存储之顺序存储定义线性表添加元素查找元素删除元素打印线性表实现的完整代码测试一下 线性表的定义 线性表的逻辑特征: ①有且仅有一个称为开始元素的a1,她没有前趋,仅有一个后继结点a2; ②有且仅有一个称为终端元素的an,他没有后继,只有一个直接前驱a(n-1); ③其余元素ai(2≤i≤n-1)称为内部元素,他们都有且仅有一个直接前驱a(i-1)和直接后继a(i+1)。 线性表的图像表示 线性表的基本运算 线性表初始化 求表长 按索引值查找元素 按值

qq_43325476的博客 912
上一篇: 02 Sruts详解
下一篇: 算法复习------求数组的最大子序列
夕夕如盼
博客等级 码龄12年 28粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值