Java算法结构---------线性表

2023-11-09

线性表相关介绍:

              线性表是一种最常用,最简单的线性结构。线性表的主要操作特定是,可以在任意位置上插入一个数据元素和删除一个数据元素。线性表可以用顺序存储结构和链式存储结构实现。用顺序存储结构实现的线性表称为顺序表,用链式存储结构实现的线性表称为链表。链表主要有单链表、循环单链表和循环双链表三种。

 

线性表的定义

 如果一个数据元素序列满足:

1、除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素。

2、第一个数据元素没有前驱数据元素。

3、最后一个数据元素没有后继元素。

则称这样的数据结构为线性结构。

 

线性表是一种可以在任意位置进行插入和删除数据元素操作的、由n(n>=0)个相同类型的数据元素a1,a2,a3,a4组成的线性结构。

 

线性表的抽象数据类型

1、数据集合:线性表的数据元素集合可以表示为序列a1,a2,a3,a4,每个数据元素的数据类型可以是任意的类类型。

2、操作集合:1、求当前数据元素的个数。

                           2、插入指定位置数据元素

                          3、删除指定位置数据元素

                          4、取出指定位置的数据元素

                           5、判断线性表是否为空

 

实例代码:

               顺序存储结构-----线性表接口代码:

package com.algorithm;

//创建顺序存储---线性表(接口)
public interface Linear {     
	//统计线性表大小
	public int size();
	//判断线性表是否为空
	public boolean isEmpty();
	//线性表--取数据
	public Object getData(int position);
	//线性表---删数据
	public boolean delete(int position);
	//线性表---存数据
	public boolean insert(int position,Object object);		
	
}


          顺序存储结构----线性表实例类代码:

package com.algorithm;

public class LinearExample implements Linear {
	//相关属性和相关的构造函数
	//默认线性表大小--20
	final int defaultSize=20;
	//线性表默认存储的最大值
	int maxSize;	
	//线性表大小
	int size;
	//线性表的数组存储对象
	Object[] listarray;
	
	
	//相关构造方法
	public LinearExample() {
		initiate(defaultSize);
	}
	public LinearExample(int sz){
		initiate(sz);		
	}
	//线性表初始化方法
	public void initiate(int length){
		maxSize=length;	
		size=0;
		listarray=new Object[length];
	}

	@Override
	public boolean delete(int position) {
		// TODO Auto-generated method stub
		boolean target=false;
		//判断是否position是否为合法值
		if(position<0||position>size-1){
			return target;
		}else if(size==0){
			return target;
		}else{
			  Object object=listarray[position];
			  //线性表---数据前移
			  for(int i=position;i<size-1;i++){
				  listarray[i]=listarray[i+1];				  
			  }
			  target=true;
			  size--;
			  return target;
		}
		
	}

	

	@Override
	public Object getData(int position) {
		// TODO Auto-generated method stub
		Object object=null;
		if(position<0||position>listarray.length-1){
			//返回错误信代码
			object="404";
		}else{
			//判读存储的数据是否为空			
			object=listarray[position];		
		}
		
		return object;
		
	}

	@Override
	public boolean insert(int position, Object object) {
		// TODO Auto-generated method stub
		boolean target=false;
		if(size==maxSize){
			return target;
		}else if(position<0||position>size){
			return target;
		}else{
			target=true;
			//线性表---数据后退
			for(int i=size;i>position;i--){
				listarray[i]=listarray[i-1];				
			}
			//线性表--数据存储
			listarray[position]=object;
			//大小添加
			size++;
			return target;
		}
		
	}

	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		boolean target=false;
		if(listarray.length>0){
			target=true;
			return target;
		}
		return target;
	}

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

}


代码实例调用:

public class ArrayTest {
	public static void main(String[] args){		
		//顺序存储--线性表
		LinearExample exaple=new LinearExample(10);	
		
		//线性表数据插入
		exaple.insert(0, "1");
		exaple.insert(1, "2");
		exaple.insert(2, "3");
		exaple.insert(3, "4");
		exaple.insert(4, "5");
		exaple.insert(5, "6");
		exaple.insert(6, "7");
		exaple.insert(7, "8");
		exaple.insert(8, "9");
		exaple.insert(9, "10");
		
		//输出线性表存储
		for(int i=0;i<exaple.size();i++){
			System.out.println("i 的值为:"+exaple.getData(i));
			
		}
		
		//线性表大小
		int size=exaple.size();
		System.out.println("线性表的大小为:"+size);
		
		//删除指定位置的数据
		boolean delete=exaple.delete(1);
		System.out.println("线性表删除是否成功:"+delete);
		//输出删除后线性表存储
		for(int i=0;i<exaple.size()-1;i++){
			System.out.println("i 的值为:"+exaple.getData(i));
			
		}
		
		//插入指定位置的值
		exaple.insert(2, "hello,world");
		//输出插入后线性表存储
		for(int i=0;i<exaple.size();i++){
			System.out.println("i 的值为:"+exaple.getData(i));
			
		}
		
	}
}


相关结果展示:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java算法结构---------线性表 的相关文章

  • 2021年我最喜欢的Java Web报表工具-实现批量+套打入园通知书

    最近龙哥的园子开张了 不少同学加好友要求入园 为满足同学们的需求 特开此篇 用锐浪JAVA WEB报表实现批量 套打 生成打印入园通知书 锐浪JAVA WEB报表官网 我们先看一下今天要实现的效果 龙哥的 入园通知书 注 自已瞎编的通知书
  • LeetCode第529题:扫雷游戏

    让我们一起来玩扫雷游戏 给你一个大小为 m x n 二维字符矩阵 board 表示扫雷游戏的盘面 其中 M 代表一个 未挖出的 地雷 E 代表一个 未挖出的 空方块 B 代表没有相邻 上 下 左 右 和所有4个对角线 地雷的 已挖出的 空白
  • 驱动的调用

    目录 设备文件 编辑 测试驱动 读写回环测试 步骤 源文件 详细的讲解看注释即可 应用和驱动之间的数据交换 在应用层调用open来打开这个系统文件 在向这个设备文件使用read write等即可调用驱动的函数去工作 设备文件 设备文件连接着
  • Sparkstreaming读取kafka数据写入hive和es

    一 主要流程 此demo用到的软件如下 软件需先自行安装 springboot 1 5 9 RELEASE hadoop 2 7 2 spark 2 1 1 elasticsearch 5 2 2 kafka 0 10 2 1 hive s
  • Cron表达式解读

    背景说明 解读0 0 10 与 0 10 的区别 各个字符代表的含义 0代表从0分开始 代表任意字符 代表递增 1 0 0 10 代表从0分钟开始 每10分钟执行任务一次 启动时间 xx 20 05 第一次执行时间 xx 20 10 第二次
  • 项目心得(三)

    赛车游戏项目心得 介绍 确定项目 分工 进度规划 资源结构 游戏数据结构 遇到的问题 项目展示 开始场景 主菜单场景 成就查询场景 诗词系统场景 无尽塔场景 车库场景 阶位场景 视频演示 项目文件 总结 介绍 我带领的第二次小组团队项目 大

随机推荐

  • 1.1 密码学哈希函数

    我们需要理解的第一个密码学的基础知识是密码学哈希函数 哈希函数是一个数学函数 具有以下三个特性 其输入可为任意大小的字符串 它产生固定大小的输出 为使本章讨论更具体 我们假设输出值大小为256位 但是 我们的讨论适用于任意规模的输出 只要其
  • 操作系统虚拟机linux系统内建立的文件为只读,如何可读可写?

    1 先建立文件 按照自己的需求建立文件 2 打开主目录 发现a c文件为只读形式 3 在终端输入chmod 666 a c 4 返回主目录 文件为可读可写形式 5 打开a c文件就可以编辑代码并保存啦
  • llS6 and llS7解析漏洞

    1 什么是llS Internet Information Services 互联网信息服务 是微软公司由微软公司提供的基于运行Microsoft windows的互联网基本服务 web服务 因为IIS是在windows操作系统平台下开发的
  • 2021-10-25尤破金10.25黄金今日行情价格走势分析及黄金原油最新策略解套

    黄金行情走势分析 周一 10月25日 国际金价徘徊在1800美元重要心理关口附近 美元指数反弹限制了金价升势 在美联储主席鲍威尔表示通胀可能持续到明年后 投资人思索美联储可能会如何应对通胀压力 在鲍威尔上周五 10月22日 表示美联储应开始
  • Pytorch分布式训练(一)

    参考文献 Writing Distributed Applications with PyTorch PyTorch Tutorials 2 0 1 cu117 documentation 33 完整讲解PyTorch多GPU分布式训练代码
  • 简单报价单模板_科普:小程序定制和模板开发有什么区别?

    小程序常见的开发方式有三种 自己源代码开发 找外包团队定制开发 使用小程序模板类开发工具 对于不懂技术的小白来说 源代码开发困难太大 那么后两种方式该如何选择呢 它们到底都有什么区别 接下来就跟大家科普一下这些知识 1 成本不同 小程序模板
  • ClickHouse(四)表引擎

    官网 表引擎 ClickHouse文档 表引擎在 ClickHouse 中的作用十分关键 直接决定了数据如何存储和读取 是否支持并发读写 是否支持 index 支持的 query 种类 是否支持主备复制等 1 表引擎概述 ClickHous
  • unity3D之动态的创建球体游戏对象js

    function OnGUI if GUILayout Button 创建立方体 GUILayout Height 50 var objCube GameObject CreatePrimitive PrimitiveType Sphere
  • JS 插入排序

    算法描述 插入排序的算法描述是一种简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 一般来说 插入排序都采用in place在数组上实现 具体算法描述如下 从第一个元素开始
  • 【OpenCV4】拉普拉斯算子提取边缘 cv::Laplacian() 用法详解和代码示例(c++)

    作用原理 拉普拉斯算子可以用于边缘检测 同时该算子不具有方向性 可以同时检测到 X 方向和 Y 方向的边缘 综合后检测出图像的边缘 即拉普拉斯算子是 各向同性 的 这在很多情况下是一个优点 因为我们一般来说会同时关注 X 方向和 Y 方向的
  • xcode4的环境变量,Build Settings参数,workspace及联编设置

    一 xcode4中的环境变量 BUILT PRODUCTS DIR build成功后的 最终产品路径 可以在Build Settings参数的Per configuration Build Products Path项里设置 TARGET
  • 英语台词--冰与火之歌

    Your roof your rules 你的地盘 你做主
  • C++基础——常引用与类型转换详解

    通过前两篇对引用的讲解 想必大家都对引用有了较为深刻的理解 没看过的小伙伴可以去看看 C 基础 引用讲解1 C 基础 引用讲解2 目录 一 常引用 1 权限的平移 2 权限的放大 3 权限的缩小 二 引用的类型转换 一 常引用 这次我来说一
  • 史上最全的Python兼职接单挣钱教程,十分详细(附基础教程)

    学python编程能挣钱吗 怎么挣钱 答案是可以的 有两点我都赚到钱的方法 接私活和自媒体 一 赚钱第一种方式 接私活 刚学会python那会 就有认识的朋友介绍做一个网站的私活 当时接单赚了4K 仅代表本人个人收益 后又自己接过开发网站后
  • A2W和W2A 很好的多字节和宽字节字符串的转换宏

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 造福人民 实现我们中华民族伟大复兴 作者 朱金灿 来源 http blog csdn ne
  • github CPlusPlusThings 基础学习笔记

    来源 Light City CPlusPlusThings C 那些事 github com 目录 const static this inline sizeof 函数指针 纯虚函数和抽象类 vptr vtable virtual vola
  • Dell R410服务器查看系统raid级别

    注意 raid 如果有问题 会导致机器网络自动断开连接 连不上机器 1 查看inux 怎么查看raid做的 是几 软件raid 只能通过Linux系统本身来查看 cat proc mdstat 可以看到raid级别 状态等信息 硬件raid
  • 前端JSON数据传值到后端接收方式

    前端发送的数据 前端JS请求 1 demo为JSON格式数据 2 let para 3 dataJ JSON stringfiy demo 4 5 这一段是Vue封装的方法 本质就是一条url 6 this http post webRoo
  • js去除url中的localtion.search部分

    localtion search是url中拼接的参数部分 js去除url中的localtion search部分包括 部分 if location search var old url window location href var ne
  • Java算法结构---------线性表

    线性表相关介绍 线性表是一种最常用 最简单的线性结构 线性表的主要操作特定是 可以在任意位置上插入一个数据元素和删除一个数据元素 线性表可以用顺序存储结构和链式存储结构实现 用顺序存储结构实现的线性表称为顺序表 用链式存储结构实现的线性表称