热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据结构用链表实现栈(设用链表作为栈)

一、解释定义1.数据结构:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。Java中的数组就是典型的顺序存储,链表就是非顺序存储。所以单向链表的最后一个节点是指向Nul


一、解释定义 1.数据结构:


数据结构是相互之间存在一个或多个特定关系的数据元素的集合。 再简单说明一下,数据结构是记述对象间逻辑关系的学科。


如果还是不太清楚,请举例如下。


2 .数据存储结构:


简单地说,就是数据在计算机中的存储方法。


典型的数据存储有两种方法:顺序存储和非顺序存储。 顺序存储是指将数据存储在一个相关的存储介质(如硬盘或内存)中。 相反是非顺序存储啊。 Java数组是典型的顺序存储器,而链表是非顺序存储器。 在数组中存储数据时,会创建一个接触存储器并按顺序存储。 链表并不是首先建立内存,只要知道下一个节点保存在哪里,就可以连接所有的数据。 因此,单向链表的最后一个节点指向Null。


数组、链表、栈和队列是最基本的数据结构,任何程序语言都包含一种或多种类型。


二、数组数组是数据结构中的基本结构,很多编程语言中都内置有数组。


java在创建数组时在内存中分割连续的内存,在数据进入时按顺序将数据存储在连续的内存中。 如果需要读取数组中的数据,则必须提供数组中的索引,数组根据索引检索内存中的数据,然后返回给读取程序。 Java并不是将所有数据存储在数组中,而是只将相同类型的数据一起存储在数组中。




所有的数据结构都支持读取、插入和删除这一基本操作。


数组在存储数据时按顺序存储,存储数据的存储器也是连续的,所以具有寻址读取容易,插入和删除困难的特点。 简单说明一下为什么,读入数据时,告诉数组从哪个位置(索引)取得数据即可,数组直接取出想要位置的数据进行传递。 插入和删除之所以困难,是因为存储这些数据的内存是连续的,要插入和删除这些数据,必须更改数组中数据的位置。 例如,一个数组在0-1-2-3-4这5个存储器地址中存储了数组的数据,但现在需要在4中插入数据。 那意味着从4开始,后面所有内存的数据都向后移动一个。 但是,需要时间。




用三、链表Java创建链表的过程与创建数组的过程不同,不会首先分割连续的内存。 链表中的数据不是连续的,所以链表在存储数据的内存中有两个区域。 一个区域用于存储数据,另一个区域用于记录下一个数据存储在哪里(指向下一个数据的指针)。 数据进入链表后,基于指针找到存储下一个数据的位置,保存数据,然后指向存储下一个数据的位置。 这样,链表利用了碎片化的空间。 链表是一个线性表,但并不是按线性顺序存储数据。




链表就是这样保存数据的,所以链表很容易插入和删除,读取数据很麻烦。 举例来说,在一个链表中有5个存储器地址0-1-2-3-4存储数据。 当前需要在2中插入数据时,只需更改1号和2号记录下一个数据的位置即可,不影响其他数据。 删除一个数据与插入相似,而且效率很高。 但是,如果想从链表中检索数据,则需要从0日开始逐个查找,直到找到想要的数据为止。




插入到链表中




从链表中删除


四、栈堆栈是先进的后发数据结构,可以通过数组和链表生成堆栈。 数据进入堆栈时,按照规则被推入堆栈底部,再次进入的数据被推入最初的数据之上,像这样。


取出堆栈中的数据时,首先取出最上面的数据,因此是先入先出。

gin/pgc-image/5ae9205b484540c9ab5a13b925f1519b?from=pc">

由于数组和链表都可以组成栈,所以操作特点就需要看栈是由数组还是链表生成的了,然后就会继承相应的操作特点。

五、队列

队列是一种先进先出的数据结构,数组和链表也都可以生成队列。当数据进入到队列中时也是先进入的在下面后进入的再上面,但是出队列的时候是先从下面出,然后才是上面的数据出,最晚进入的队列的,最后出。

举个简单的例子:可以把栈和队列看成是两根管子,这两根管子是用来存储数据的,有可能是数组生成的也有可能是链表生成的,栈的这根管子有一头是封死的,所以像这个管子放数据只能从一个口进,拿出数据的时候也只能从这一个口拿出来。而队列这根管子呢两个口都是敞开的,一个口负责进数据,另一个口负责出数据,所以从一进口先进去的数据,在出口处会先被拿出来。

推荐阅读

绝对干货,掌握这27个知识点,轻松拿下80%的技术面试(Java岗)

一线大厂为什么面试必问分布式?

在一次又一次的失败中,我总结了这份万字的《MySQL性能调优笔记》

并发编程详解:十三个工具类,十大设计模式,从理论基础到案例实战

如何高效部署分布式消息队列?这份《RabbitMQ实战》绝对可以帮到你


推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
author-avatar
意淫图
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有