Java——》线性数据结构

news2025/1/1 14:41:25

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】
    总结——》【Linux】
    总结——》【MongoDB】
    总结——》【Elasticsearch】

Java——》线性数据结构

  • 一、数组Array
    • 1、特点
    • 2、优点
    • 3、缺点
    • 4、示例
  • 二、链表
    • 1、特点
    • 2、分类
      • 2.1 单向链表
        • (1)删除节点
        • (2)添加节点
      • 2.2 双向链表
        • (1)删除节点
        • (2)添加节点
      • 2.3 循环链表
  • 三、队列queue
    • 1、特点
    • 2、数据结构演示
    • 3、示例
  • 四、栈stack
    • 1、特点
    • 2、主要操作

线性表就是数据排成像一条线的结构。
每个线性表上的数据最多只有前和后两个方向。
线性表结构:数组、链表、队列、栈

一、数组Array

数组是一种线性表数据结构。用一组连续的内存空间,来存储一组具有固定大小的相同类型的数据。在数组中,数据元素按照有序的方式进行排列,可以通过索引访问数组中的任意位置的元素。

1、特点

  1. 顺序存储:按照顺序存储在连续的内存空间中
  2. 类型相同:数组中的所有元素必须是相同的数据类型
  3. 索引访问:每个元素都有一个唯一的索引,可以通过索引快速访问
  4. 大小固定:一旦定义了数组的大小,就不能改变。如果需要更大的存储空间,需要重新定义一个新的数组。

2、优点

  1. 访问速度快:由于数组是顺序存储的,可以通过索引直接访问数组中的元素,时间复杂度为O(1)。
  2. 易于实现:数组是一种简单的数据结构,容易实现和操作。

3、缺点

  1. 大小固定:数组的大小是固定的,不能动态扩展。如果需要更多的存储空间,需要重新定义一个新的数组,这会增加额外的开销。
  2. 空间利用率低:由于数组是连续的内存空间,即使某些位置没有被使用,也不能被其他数据结构使用,导致空间利用率较低。

4、示例

// 动态初始化:初始化时由程序员只指定数组长度,由系统为数组元素分配初始值
char c1[] = new char[5];

// 静态初始化: 初始化时由程序员显示置顶每个数组的初始值,由系统决定数组长度
char c2[] = new char[]{'E','D','U','Y','U'};
char c3[] = {'E','D','U','Y','U'};

二、链表

数组是一种线性表数据结构。
通过指针将一组零散的内存块串联在一起。链表中的每个内存块被称为节点,每个节点除了存储数据之外,还需要记录链上的下一个节点的地址。

1、特点

  1. 不需要连续的内存空间
  2. 有指针引用
  3. 插入、删除数据效率高,时间复杂度为O(1)级别(只需更改指针指向即可);但是,随机访问效率低,时间复杂度O(n)级别(需要从链头至链尾进行遍历)。
  4. 和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。

2、分类

分类特点
单向链表节点只有一个后继指针next指向后面的节点
双向链表节点除了有一个后继指针next指向后面的节点外,还有一个前驱指针prev指向前面的节点
循环链表循环链表与单向链表的唯一区别是尾节点的指针指向头节点,形成一个环

2.1 单向链表

单向链表由节点组成,每个节点都包含下一个节点的指针,表头为空,表头的后继节点是"结点10"(数据为10的结点),“节点10"的后继结点是"节点20”(数据为20的结点)

(1)删除节点

(2)添加节点

2.2 双向链表

双链表由节点组成,每个结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。

    static final class Node {
       // 前一个节点
        volatile Node prev;
        // 后一个节点
        volatile Node next;
		// 链表节点存储的具体数据
        volatile Thread thread;
    }
(1)删除节点

(2)添加节点

2.3 循环链表

三、队列queue

队列是一种线性表数据结构。先进先出FIFO,后进后出
只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
允许插入的一端称为队尾,允许删除的一端称为队头。

1、特点

  1. 先进先出:队列中的元素遵循先进先出的原则,即最早进入队列的元素最先被删除。
  2. 插入和删除操作发生在同端:队列中的插入操作发生在队尾,删除操作发生在队头。
  3. 无界队列:队列的长度可以是任意的整数,只要内存空间足够。

2、数据结构演示

参考链接:数据结构演示地址

3、示例

package com.xiaoxian.demo;

import java.util.LinkedList;
import java.util.Queue;

public class QueueTest {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(3);//尾插
        queue.offer(6);
        queue.offer(9);
        queue.offer(12);
        System.out.println(queue);
        System.out.println(queue.peek());//访问队列头元素
        System.out.println(queue);
        System.out.println(queue.poll());//删除队列头元素
        System.out.println(queue);
    }
}

image.png

四、栈stack

是一种线性表数据结构。
只能在表尾进行插入或者删除后进先出
表尾端称为栈顶(top),表头端称为栈底(bottom)。
不含元素的空表称为空栈。

1、特点

  1. 后进先出
  2. 只能在表尾进行插入或者删除

2、主要操作

  1. 入栈(push):在栈顶添加一个元素。
  2. 出栈(pop):删除栈顶的元素并返回其值。
  3. 判断栈空(is_empty):检查栈是否为空。
  4. 获取栈顶元素(top):返回栈顶的元素值,但不删除它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1277344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java下载和安装

java下载和安装 一、下载和安装 下载地址&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows 1.这里我们下载JDK21&#xff0c;初学者建议还是使用JDK8或者JDK17&#xff0c;因为更加稳定 2.下载完成后运行 3.点击下一步 4.设置安装位置&am…

双向链表的结构与基本操作(初始化,头插,尾插,删除,输出,清空,销毁等)

目录 1.双向链表的结构设计 2.双向链表的结构示意图: 3.双向链表的实现 4.双向链表的总结 1.双向链表的结构设计 typedef struct DNode{int data;struct DNode* next;//后继指针struct DNode* prio;//前驱指针}DNode ,*DList; 2.双向链表的结构示意图: 3.双向链表的实现 …

Mysql数据库介绍

1.1 MySQL数据库介绍 1.1.1 什么是数据库DB&#xff1f; DB的全称是database&#xff0c;即数据库的意思。数据库实际上就是一个文件集合&#xff0c;是一个存储数据的仓库&#xff0c;数据库是按照特定的格式把数据存储起来&#xff0c;用户可以对存储的数据进行增删改查操作…

深度学习实战63-利用自适应混合金字塔网络实现人脸皮肤美颜效果,快速部署与实现一键美颜功能

大家好,我是微学AI,今天给大家介绍一下深度学习实战63-利用自适应混合金字塔网络实现人脸皮肤美颜效果,快速部署与实现一键美颜功能。在本文中,我将介绍一种新颖的自适应混合金字塔网络(ABPN),该网络可以实现对超高分辨率照片的快速局部修饰。该网络主要由两个组件组成:一…

IDEA下载和安装

IDEA的下载和安装 一、概述 IDEA全称IntelliJ IDEA&#xff0c;是用于Java语言开发的集成环境&#xff0c;它是业界公认的目前用于Java程序开发最好的工具。 集成环境&#xff1a;把代码编写&#xff0c;编译&#xff0c;执行&#xff0c;调试等多种功能综合到一起的开发工具…

数字员工「取数宝」上新!4大优势,解决电商取数难题

全域电商&#xff0c;是近几年的新趋势&#xff0c;几乎所有商家都在布局全域&#xff0c;追求全域增长。但商家发现&#xff0c;随着投入成本的上涨&#xff0c;利润却没有增加。 其中最为突出的是——商家为保证全域数据的及时更新&#xff0c;通过堆人头的方式完成每日取数…

卡码网语言基础课 | 18. 开房门

目录 一、 map基础 二、 map的使用 2.1 map头文件的引入 2.2 声明映射关系 2.3 插入键值 2.4 查找键的存在 三、 范围for循环 题目&#xff1a; 假设你手里有一串钥匙&#xff0c;这串钥匙上每把钥匙都有一个编号&#xff0c;对应着一个房门的编号。现给你一个房门编号&a…

7.4 Windows驱动开发:内核运用LoadImage屏蔽驱动

在笔者上一篇文章《内核监视LoadImage映像回调》中LyShark简单介绍了如何通过PsSetLoadImageNotifyRoutine函数注册回调来监视驱动模块的加载&#xff0c;注意我这里用的是监视而不是监控之所以是监视而不是监控那是因为PsSetLoadImageNotifyRoutine无法实现参数控制&#xff0…

免费采集工具推荐,好文章值得收藏

采集工具的作用 在互联网的海洋中&#xff0c;有许多强大的免费采集工具&#xff0c;它们为用户提供了便捷、高效的方式&#xff0c;帮助用户从各种网站中收集、整理所需的信息。这些工具不仅广泛应用于市场研究、竞争情报等商业领域&#xff0c;同时也服务于学术研究、个人兴…

分享86个节日PPT,总有一款适合您

分享86个节日PPT&#xff0c;总有一款适合您 86个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1J09nhufX_3gvT2XxZkKz6Q?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

30秒搞定一个属于你的问答机器人,快速抓取网站内容

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 文章目录 简介运行效果GitHub地址 简介 爬取一个网站的内容&#xff0c;然后让这个内容变成你自己的私有知识库&#xff0c;并且还可以搭建一个基于私有知识库的问…

道可云会展元宇宙平台全新升级,打造3D沉浸式展会新模式

随着VR虚拟现实、人工智能、虚拟数字人等元宇宙技术的快速发展&#xff0c;各个行业正试图通过元宇宙技术寻求新的发展突破口&#xff0c;会展行业也不例外。会展作为经贸领域的重要产业形态&#xff0c;越来越多的企业和组织开始寻求通过元宇宙技术为展会赋能&#xff0c;以满…

type-c充电器输出电压5V9V12V15V20V PD协议诱骗快充应用方案

Type-C接口的PD充电器&#xff08;如iPhone的20W充电器&#xff09;默认是没有电压输出的&#xff0c;想要让Type-C的充电器输出5V、9V、12V、15V、20V&#xff0c;只需要在产品上使用一颗快充取电芯片XSP08即可。 工作原理&#xff1a; 各类小家电产品如平板电脑、智能穿戴产…

Redis主从复制实现RCE

文章目录 前置知识概念redis常用命令redis module 利用条件利用工具思路例题 [网鼎杯 2020 玄武组]SSRFMe方法一方法二 总结 前置知识 概念 背景是多台服务器要保存同一份数据&#xff0c;如何实现其一致性呢&#xff1f;数据的读写操作是否每台服务器都可以处理&#xff1f;这…

第九节HarmonyOS 常用基础组件4-Button

一、Button Button组件主要用来响应点击操作&#xff0c;可以包含子组件。 示例代码&#xff1a; Entry Component struct Index {build() {Row() {Column() {Button(确定, { type: ButtonType.Capsule, stateEffect: true }).width(90%).height(40).fontSize(16).fontWeigh…

【Python】Python给工作减负-读Excel文件生成xml文件

目录 ​前言 正文 1.Python基础学习 2.Python读取Excel表格 2.1安装xlrd模块 2.2使用介绍 2.2.1常用单元格中的数据类型 2.2.2 导入模块 2.2.3打开Excel文件读取数据 2.2.4常用函数 2.2.5代码测试 2.2.6 Python操作Excel官方网址 3.Python创建xml文件 3.1 xml语法…

前端面试灵魂提问(1)

1.自我介绍 2.在实习中&#xff0c;你负责那一模块 3.any与unknow的异同 相同点&#xff1a;any和unkonwn 可以接受任何值 不同点&#xff1a;any会丢掉类型限制&#xff0c;可以用any 类型的变量随意做任何事情。unknown 变量会强制执行类型检查&#xff0c;所以在使用一个…

msvcp140_codecvt_ids.dll丢失解决方案,验证有效

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140_codecvt_ids.dll丢失”。这些动态链接库文件是程序运行所必需的&#xff0c;它们包含了许多函数和资源。丢失或者损坏通常会导致某些应用程序无法正常运行。 首先&#xff0c;我们…

同旺科技 USB TO SPI / I2C --- 调试W5500

所需设备&#xff1a; 内附链接 1、USB转SPI_I2C适配器(专业版); 首先&#xff0c;连接W5500模块与同旺科技USB TO SPI / I2C适配器&#xff0c;如下图&#xff1a; 读取重试时间值寄存器&#xff0c;默认值0x07D0 输出结果与默认值一致&#xff0c;芯片基本功能已经调通&am…

DDD系列 - 第5讲 从架构师的角度看待DDD - 一个关于拆解、微服务、面向对象的故事(三)

目录 给这个故事起个新的名字 - DDD补充给这个故事起个新的名字 - DDD 到此这个故事可以暂时告一段落了,整个过程我们采用了拆解、微服务架构、面向对象的设计思想,并不断进行优化与思考,最终整个建模过程及架构方案归纳如下图: 接下来我们给这个故事换个名字:DDD(Domai…