当前位置: 首页 > news >正文

三、线性表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

自学JAVA数据结构笔记,跟学视频为:黑马程序员Java数据结构与java算法全套教程,数据结构+算法教程全资料发布,包含154张java数据结构图_哔哩哔哩_bilibili


提示:以下是本篇文章正文内容,下面案例可供参考

一、线性表的概述

1.概述

线性表时最基本、最简单、也是最常用的一种数据结构,一个线性表时n个具有相同特征的数据元素的有限序列

2.特征

线性表的数据元素之间具有一种“一对一”的逻辑关系

1.第一个元素没有前驱,这个数据元素被称为头结点

2.最后一个元素没有后继,这个元素被称为尾结点

3.除了第一个和最后一个元素外,其他数据元素有且只要一个前驱和一个后继

3.分类

1.顺序存储数据元素的线性表为顺序表

2.链式存储数据元素的线性表为链表

二、顺序表的实现

1.顺序表的API

类名                 SequenceList

构造方法          SequenceList(int capacity):创建容量为capacity的SequenceList对象

成员方法          1.public void clear():空置线性表

                         2.publicboolean isEmpty():判断线性表是否为空,是返回true,否返回false                           3.public int length():获取线性表中元素的个数

                         4.public T get(int i):读取并返回线性表中的第i个元素的值

                         5.public void insert(int i,T t):在线性表的第i个元素之前插入一个值为t的数据元素。

                         6.public void insert(T t):向线性表中添加一个元素t

                         7.public T remove(int i):删除并返回线性表中第i个数据元素。

                         8.public int indexOf(T t):返回线性表中首次出现的指定的数据元素的位序号,若不存在,则返 回-1。

成员变量          1.private T[] eles:存储元素的数组

                         2.private int N:当前线性表的长度

2.顺序表实现

顺序表类:

package List;import java.util.Iterator;
import java.util.Spliterator;
import java.util.function.Consumer;public class SequenceList <T> implements Iterable<T>{private T[] eles;private  int N;//构造方法public SequenceList(int Capacity){//初始化数组this.eles = (T[]) new Object[Capacity];//初始化长度this.N = 0;}//清除线性表public void clear(){this.N = 0;}//判断线性表是否为空public boolean isEmpty(){return N == 0;}//获取线性表长度public int length(){return N;}//获取线性表指定位置元素public T get(int i){//安全性检测if (i < 0 || i >= N){throw new RuntimeException("当前元素不存在!");}return eles[i];}//向线性表中添加元素tpublic void insert(T t){//如果数组已经满了,则需要给数组扩容if(N == eles.length){resize(2 * eles.length);}eles[N ++] = t;}//给数组扩容private void resize(int newsize){//创建临时数组,将eles的数据放入临时数组T[] temp = eles;//对数组进行初始化,建立一个容量为newsize的数组eles = (T[]) new Object[newsize];//将temp内的数据重新放入elesif (N >= 0){System.arraycopy(temp, 0, eles, 0, N);}}//在i处加入元素tpublic void insert(int i,T t){//安全性检测if (i < 0 || i > N){throw new RuntimeException("插入的位置不合法");}//先判断数组是否已满//如果数组满了,给数组扩容if(N == eles.length){resize(2 * eles.length);}//将i后面数据后移for(int index = N - 1;index > i;index --){eles[index] = eles[index - 1];}//接着向i位置插入数据eles[i] = t;N ++;}//删除i处位置元素public T remove(int i){//安全性检测if (i < 0 || i > N - 1){throw new RuntimeException("当前要删除的元素不存在");}//临时值存储i位置元素T temp = eles[i];//i位置后数组元素前移for(int index = i;index < N - 1;index ++){eles[index] = eles[index + 1];}N --;//为了避免空间浪费if(N < eles.length / 4){resize(eles.length / 2);}return temp;}//查找t第一次出现的索引public int indexOf(T t){//安全性检测if(t == null){throw new RuntimeException("查找的元素不合法");}for(int i = 0;i < N;i ++){if(eles[i].equals(t)){return i;}}return -1;}//打印当前线性表的元素public void showEles() {for (int i = 0; i < N; i++) {System.out.print(eles[i] + " ");}System.out.println();}@Overridepublic Iterator<T> iterator() {return new Siterator();}//内部类重写迭代器private class Siterator implements Iterator{private int curr;public Siterator(){this.curr = 0;}@Overridepublic boolean hasNext() {return curr < N;}@Overridepublic Object next() {return eles[curr ++];}}}

测试类: 

package List;public class SequenceListTest {public static void main(String[] args) {SequenceList<String> squence = new SequenceList<>(5);//测试遍历squence.insert(0, "姚明");squence.insert(1, "科比");squence.insert(2, "麦迪");squence.insert(3, "艾佛森");squence.insert(4, "卡特");System.out.println(squence.length());squence.insert(5,"aa");System.out.println(squence.length());squence.insert(5,"aa");squence.insert(5,"aa");squence.insert(5,"aa");squence.insert(5,"aa");squence.insert(5,"aa");System.out.println(squence.length());squence.remove(1);squence.remove(1);squence.remove(1);squence.remove(1);squence.remove(1);squence.remove(1);squence.remove(1);System.out.println(squence.length());}}

总结

提示:这里对文章进行总结:
 

相关文章:

三、线性表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 自学JAVA数据结构笔记&#xff0c;跟学视频为&#xff1a;黑马程序员Java数据结构与java算法全套教程…...

C++统计方形

统计方形 内存限制&#xff1a;256 MB 时间限制&#xff1a;1 S 题目描述 有一个n*m方格的棋盘&#xff0c;求其方格包含多少正方形、长方形&#xff08;此处长方形不包含正方形&#xff09; 输入格式 输入存在多组测试数据。每组测试数据输入两个整数n,m&#xff0c;数字不超…...

Tina_Linux配网开发指南

OpenRemoved_Tina_Linux_配网_开发指南 1 概述 1.1 编写目的 介绍Allwinner 平台上基于wifimanager-v2.0 的WiFi 配网方式&#xff0c;包括softap(WiFi ap 模式热点配网),soundwave(声波配网),BLE(蓝牙低功耗配网)。 1.2 适用范围 • allwinner 软件平台tina v5.0 版本及以…...

高频面试题|RabbitMQ如何防止消息的重复消费?

一. 前言最近有很多小伙伴开始找工作&#xff0c;在面试时&#xff0c;面试官经常会问我们这样一个题目&#xff1a;RabbitMQ如何防止重复消费?有很多小伙伴这个时候都在想&#xff0c;消息怎么还会重复消费呢???.......所以他们在面试后就跑来问壹哥&#xff0c;针对这个比…...

黑盒测试用例设计方法-边界值分析法

目录 一、边界值定义 二、边界值的考虑 三、边界值的优化 四、边界值的设计用例的步骤 五、案例 六、边界值的类型 一、边界值定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充&#xff0c;这种情况下…...

项目风险管理中不可忽视的5个关键点

1、风险意识非常重要 项目经理必须要有风险意识&#xff0c;并不是项目计划做好就万事大吉&#xff0c;而是需要对项目风险进行预判&#xff0c;时刻保持风险意识&#xff0c;及时发现和处理项目风险。 项目风险管理关键&#xff1a;风险意识​ 2、建立组织风险资产库 寻…...

Linux->进程地址空间

目录 前言&#xff1a; 1. 程序地址空间回顾 2. 进程空间是什么 3. 进程地址空间与内存 4. 进程地址空间和内存的关联 5. 为什么要有进程地址空间 前言&#xff1a; 我们在平时学习的过程当中总是听到栈、堆、代码段等等储存空间&#xff0c;但是这些东西到底是什么&…...

【奶奶看了也不会】AI绘画 Mac安装stable-diffusion-webui绘制AI妹子保姆级教程

1.作品图 2.准备工作 目前网上能搜到的stable-diffusion-webui的安装教程都是Window和Mac M1芯片的&#xff0c;而对于因特尔芯片的文章少之又少&#xff0c;这就导致我们还在用老Intel 芯片的Mac本&#xff0c;看着别人生成美女图片只能眼馋。所以小卷这周末折腾了一天&#…...

基于stm32电梯管理系统设计

基于stm32电梯管理系统设计这里记录一下以前自己做的嵌入式课程设计&#xff0c;报告中的图片和文字太多了&#xff0c;全部一个一个把搬过来太麻烦了,需要完整文本和代码自行q我963160156&#xff0c;也可在微信公众号 *高级嵌入式软件* 里回复 *电梯* 查看完整版文章摘要关键…...

Spring中的FactoryBean 和 BeanFactory、BeanPostProcessor 和BeanFactoryPostProcessor解析

文章目录FactoryBean 和 BeanFactory后置处理器BeanPostProcessor 和 BeanFactoryPostProcessorBeanPostProcessorBeanFactoryPostProcessorFactoryBean 和 BeanFactory BeanFactory接⼝是容器的顶级接⼝&#xff0c;定义了容器的⼀些基础⾏为&#xff0c;负责⽣产和管理Bean的…...

【C++从入门到放弃】类和对象(上)

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《C从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 类和对…...

什么牌子的蓝牙耳机便宜好用?四款高品质蓝牙耳机推荐

随着时代的发展&#xff0c;蓝牙耳机的使用频率越来越高&#xff0c;不少人外出时除了带手机外&#xff0c;蓝牙耳机也成为了外出必备的数码产品之一。现在的蓝牙耳机品牌众多&#xff0c;什么牌子的蓝牙耳机便宜好用&#xff1f;下面&#xff0c;我来给大家推荐四款高品质的蓝…...

eddsa 算法

信息安全课程设计&#xff1a;eddsa 算法 一、项目要求 使用 C 语言开发&#xff1b;可以实现公私钥生成、签名、认证&#xff1b;只需要手动输入明文&#xff0c;代码会自动生成公私钥、签名、认证&#xff1b;记录公私钥生成、签名、认证的时间&#xff1b;在 VS 上运行&am…...

Xcode Developer Document 开发者文档

总目录 iOS开发笔记目录 从一无所知到入门 文章目录IntroDeveloper Documentation 打开方式菜单栏点击 &#xff5c; 快捷键方式另一种打开方式Intro 2016年我在学校学Java的时候&#xff0c;要查某个Java类/方法的用法还得自己手动下载一种.chm格式的开发文档文件&#xff0c…...

IntelliJ插件开发教程之新建项目

JetBrains公司系列产品IDEA、WebStrom、PyCharm、CLion、GoLand等都是基于IntelliJ Platform开发而成&#xff0c;掌握IntelliJ插件开发技能便能拥有提升开发效率的终极武器。本教程Demo源码请微信公众号“开发效率”进行获取。阅读原文如果您是JetBrains产品的用户&#xff0c…...

解决SpringBoot中@RequestBody不能和Multipart同时传递的问题

问题描述 今天在做文件上传的时候&#xff0c;遇到了这么一个错误日志&#xff1a; Resolved[org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘multipart/form-data;boundary--------------------------771899451541318130280588;charsetUTF-8’…...

【华为OD机试模拟题】用 C++ 实现 - 统计匹配的二元组个数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明统计匹配的二元组个数题目输入输出描述示例一输入输出说明示例二输入输出说明备注Code使用说明 参加华为od机试,一定要注意不要完全背诵代码&...

Vuex 面试题总结 的历史汇总!

一.vuex是什么&#xff1f;怎么使用&#xff1f;哪种功能场景使用它&#xff1f; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。简单来说就是&#xff1a;应用…...

Redis缓存更新策略与缓存穿透、雪崩等问题的解决

文章目录一、缓存更新策略1、三种策略2、策略选择3、主动更新的方案二、缓存存在的问题1、缓存穿透2、缓存雪崩3、缓存击穿三、解决缓存问题1、自定义分布式锁2、解决缓存穿透问题3、解决缓存击穿问题一、缓存更新策略 1、三种策略 内存淘汰&#xff1a;redis自带的内存淘汰机…...

OSI和TCP/IP网络模型细讲

文章目录一、OSI七层参考模型二、TCP/IP体系结构三、TCP/IP参考模型四、沙漏计时器形状的TCP/IP协议族五、两种国际标准对比相似之处不同之处一、OSI七层参考模型 OSI参考模型共分为7层&#xff0c;低三层面向通信&#xff0c;可用软硬件实现&#xff1b;高三层面向信息处理&am…...

【正点原子FPGA连载】第十九章FreeRtos Hello World实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十九章FreeRto…...

php mysql高校田径运动会成绩管理系统

第一章 引言 1 1.1 选题背景 1 1.2 编写目的 2 1.3 目标 2 1.4 功能需求 3 第二章 开发工具介绍 4 2.1 PHP 4 2.2 APACHE 5 2.3 MYSQL数据库 5 2.4 运行环境 WINDOWS XP 6 2.5 XAMPP 6 2.6 DREAMWEAVE8 6 2.7 EDITPLUS 7 第三章 需求…...

scrum敏捷项目管理软件三款

Leangoo领歌Leangoo是国产的一个项目管理软件&#xff0c;www.leangoo.com &#xff0c; 专门的Scrum敏捷开发工具&#xff0c;看板的管理方式&#xff0c;高度可视化。它支持敏捷开发全流程。从产品路线图-需求-迭代-缺陷-测试-上线。燃尽图&#xff0c;工作量&#xff0c;迭代…...

【项目设计】高并发内存池(二)[高并发内存池整体框架设计|threadcache]

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…...

西电编译原理期末核心考点汇总(期末真题+相关知识点)

文章目录前言一、正规式1.1 相关知识点1.1.1 正规式定义1.1.2 辅助定义1.2 历年真题二、二义文法2.1 相关知识点2.1.1 二义性概念2.2 历年考题三、全部短语、直接短语和句柄3.1 相关知识点3.1.1 短语&#xff0c;直接短语和句柄定义3.1.2 短语&#xff0c;直接短语和句柄例题3.…...

追梦之旅【数据结构篇】——详解C语言实现二叉树

详解C语言实现二叉树~&#x1f60e;前言&#x1f64c;什么是二叉树&#xff1f;二叉树的性质总结&#xff1a;整体实现内容分析&#x1f49e;1.头文件的编写&#xff1a;&#x1f64c;2.功能文件的编写&#xff1a;&#x1f64c;1&#xff09;前序遍历的数值来创建树——递归函…...

独家 | Gen-1——可以改变视频风格的AI模型

翻译&#xff1a;吴振东校对&#xff1a;张睿毅本文约1000字&#xff0c;建议阅读3分钟 本文简单介绍了Runway公司的发展史&#xff0c;以及他们新推出的生成式AI模型Gen-1&#xff0c;可用于通过应用文本提示或者参考图像所指定的任意风格&#xff0c;将现有视频转换为新视频。…...

戴尔dell inspiron-5598电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。硬件型号驱动情况主板X99 K9 v2 Machinist处理器i5-10210U / *i7-10510U已驱动内存20GB已驱动硬盘1000GB SAMSUNG 860 QVO SATA已驱动显卡Intel UHD 620已驱动声卡Realtek ALC3204/236已驱动网卡RTL8168H Gigabit Ethernet已…...

3.2 网站图的爬取路径

深度优先与广度优先方法都是遍历树的一种方法&#xff0c;但是网站的各个网页 之间的关系未必是树的结构&#xff0c;它们可能组成一个复杂的图形结构&#xff0c;即有回路。如果在前面的网站中每个网页都加一条Home的语句&#xff0c;让每个网页都能回到主界面&#xff0c;那么…...

《SQL基础》12. SQL优化

SQL优化SQL优化数据插入insert优化大批量插入数据主键优化order by优化group by优化limit优化count优化count用法update优化SQL优化 数据插入 insert优化 如果我们需要一次性往数据库表中插入多条记录&#xff0c;可以从以下三个方面进行优化。 批量插入手动控制事务主键顺…...

做任务的电脑网站/福州seo网站推广优化

爬取网页数据是python很长干的一件事情&#xff0c;不过做起来基本上都是很冗长的一段代码&#xff0c;看起来复杂&#xff0c;不宜理解。今天给大家分享一个小诀窍&#xff0c;利用python3中的requests类库进行爬取网页数据。我们先看一哈用这个requests类库做的效果本节分享技…...

网站开发一般流程/做网站建设的公司

LVS是Linux Virtual Server的简写&#xff0c;意即Linux虚拟服务器&#xff0c;是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立&#xff0c;是中国国内最早出现的自由软件项目之一。负载均衡集群是 load balance 集群的简写&#xff0c;翻译成中文就是负载均衡…...

专门做装修的网站/最近的电脑培训学校

给定post请求包体&#xff08;是json的字符串&#xff09; {"A" : 10086,"B" : "请求信息"} 发送HTTP过程 1. 将post请求包体&#xff08;是个json格式的字符串&#xff09;&#xff0c;Marshal成json格式 2. 发送HTTP请求 3. 接收HTTP返回…...

wordpress顶踩仿织梦/在线搜索资源

思路1&#xff1a;使用回溯法&#xff0c;同时剪掉不合理分支 // 产生不同的括号队列&#xff0c;选用回溯法 class Solution { public:vector<string> res;vector<string> generateParenthesis(int n) {string str "";backtrack(0,0,n,str);return re…...

成都装饰公司网站建设/百度seo规则

&#xff08;一&#xff09;String类&#xff1a; Java使用String类来创建和操作字符串&#xff1b;String str"hello World"; 注意&#xff1a;String类是不可变的&#xff0c;一旦创建了String对象&#xff0c;他的值就无法改变了&#xff1b; 常用方法&#xf…...

做音乐网站需要版权么/百度识图在线识别

今天总结了一下spring中作用域scope的用法。在spring中作用域通过配置文件形式的用法如下。 1<bean id"role" class"spring.chapter2.maryGame.Role" scope"singleton"/>一. 在spring 中常用的作用域有单例模式&#xff08;singleton&…...