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

深入理解数据结构(1)—用链表实现栈

栈是一种数据结构,链表也是一种数据结构。它们都是由基础的语法实现的。

如果一个数据结构可以用另外的数据结构来实现,那么可以有力的证明——“数据结构是一种思想”,是一种讲语法组合起来实现某种功能的手段

一、栈的特点——要实现哪些功能?

既然要用链表来模拟栈,那么要实现哪些功能?

  1. 栈是一种特殊的线性表,只允许在固定一端进行插入和删除元素操作
  2. 后进先出

那么对于这两个特性,我们可以做出如下设想:

在使用单链表的情况下,从头部插入——模拟入栈,头部删除——模拟出栈。同时这样操作满足了时间复杂度O(1)

每次向栈中插入一个元素,就是向这个链表前端插入一个新的“head”;

每次从栈中弹出一个元素,就是从链表头部删除一个“head”,然后“head = head.next”;

二、代码实现 

public class MyStack {/*创建链表的节点*/static class Node{public int val;public Node next;public Node(int val){this.val = val;}}public Node head;public int size;//实现入栈方法public void push(int val){Node node = new Node(val);/*如果此时链表中没有节点,那么将node设为head,并将有效元素个数size加1* 如果链表中已经有元素的话,将node节点头插到head节点前,并设为head*/if (size == 0){head = node;}else {node.next = head;head = node;}size++;}//实现出栈方法/*返回当前头节点的值,并将头节点后移*/public int pop(){int h = head.val;head = head.next;size--;return h;}//获取栈顶元素的peek方法public int peek(){return head.val;}//判断栈是否为空public boolean empty(){return size == 0;}public static void main(String[] args) {MyStack stack = new MyStack();stack.push(12);stack.push(24);stack.push(26);stack.push(58);int b = stack.pop();int a = stack.peek();System.out.println(b);System.out.println(a);}
}

 

相关文章:

深入理解数据结构(1)—用链表实现栈

栈是一种数据结构,链表也是一种数据结构。它们都是由基础的语法实现的。 如果一个数据结构可以用另外的数据结构来实现,那么可以有力的证明——“数据结构是一种思想”,是一种讲语法组合起来实现某种功能的手段 一、栈的特点——要实现哪些功…...

Jtti:debian安装firewalld错误怎么办

如果在Debian系统上安装Firewalld时出现错误,可以尝试以下步骤来解决问题: 更新软件包列表: 首先确保您的Debian系统的软件包列表是最新的。运行以下命令: sudo apt update 安装Firewalld: 使用以下命令安装Firewalld&…...

如何理解python中的*args和**kwargs

args用于表示可变数量的位置参数(Positional Arguments) kwargs 用于表示可变数量的关键字参数(Keyword Arguments)。 *args 来接收不定数量的位置参数 实例: def exampleFunc(*args):print(type(args))for arg in args:print…...

软考之软件工程基础理论知识

软件工程基础 软件开发方法 结构化方法 将整个系统的开发过程分为若干阶段,然后依次进行,前一阶段是后一阶段的工作依据按顺序完成。应用最广泛。特点是注重开发过程的整体性和全局性。缺点是开发周期长文档设计说明繁琐,工作效率低开发前要…...

香港服务器不稳定的几种情况

​  近年来,随着互联网的迅猛发展,香港作为一个重要的网络枢纽地区,扮演着连接中国内地和国际网络的重要角色。一些用户表示在使用香港服务器时可能会遇到不稳定的情况,导致访问困难、加载缓慢甚至无法连接。 为什么香港服务器会…...

报修软件有什么用?企业如何做好设备管理与维护?

在当今的商业环境中,设备设施的维护和管理已经成为企业运营的重要环节。无论是学校、酒店、物业等大型企事业单位,还是运维集成商、制造工厂等企业单位,都需要对设备设施进行有效的管理。报修软件作为一种智能化的解决方案,为设备…...

Go语言的键盘输入和打印输出

键盘输入和打印输出 一、打印输出 1.1 fmt包 fmt包实现了类似C语言printf和scanf的格式化I/O。格式化verb(‘verb’)源自C语言但更简单。 详见官网fmt的API:https://golang.google.cn/pkg/fmt/ 1.2 导入包 import "fmt"1.3 常…...

jenkins实践篇(2)—— 自动打tag的可回滚发布模式

大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打tag的方式来进行部署,下面我将详细介绍整个发布过程的逻辑。 发布…...

golang worker channel 模式

大概流程就是job -> JobQueue调度器循环获取JobQueue &#xff0c;获取到的job &#xff0c;再去异步获取等待可用的 worker&#xff0c;取出 chan Job,将job 写入改worker的 chan Jobworker 处理任务&#xff0c;先处理 case job : <-w.JobChannel: 处理完成后再将 chan…...

舔狗日记之好一条舔狗

闲来没事&#xff0c;爬了下vx《舔狗日记》&#xff0c;感觉挺有意思的&#xff0c;分享出来给大家看看。 PS&#xff1a;仅供娱乐&#xff0c;侵删。 舔狗2023 舔狗日记 2023年10月11日 晴天 你们根本不懂舔狗的快乐。被舔的人&#xff0c;无法预知接下来会不会继续被舔&…...

【地理位置识别】IP归属地应用的特点

IP归属地应用是一类用于确定特定IP地址的地理位置信息&#xff08;通常是城市、地区或国家&#xff09;的工具和服务。以下是IP归属地应用的几个主要特点&#xff1a; 地理位置识别&#xff1a; IP归属地应用主要用于确定IP地址的地理位置。这可以帮助组织更好地了解其网站访问…...

华为实验基础(2):路由器基础

一、路由器的分类 1、从功能、性能和应用方面划分&#xff1a; &#xff08;1&#xff09; 骨干路由器 &#xff1a;骨干路由器是实现主干网络互连的关键设备&#xff0c;通常采用模块化结构&#xff0c;通过热备 份、双电源和双数据通路等冗余技术提高可靠性 &#xff0c;华…...

婚姻管理系统-使用bbst数据结构

使用到希尔排序和归并排序&#xff0c;文件存储 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> //名字的最大长度 #define NameMax 30 //全局的文件指针变量 FILE* file, * file_admin, * file_divorce; /…...

软件架构的概念

1.软件架构演化 为了适应用户的新需求、业务环境和运行环境的变化等&#xff0c;软件架构需要不断地进行自身的演化&#xff0c;也就是说软件架构的演化就是为了维持软件架构自身的有用性。 本质上讲&#xff0c;软件架构的演化就是软件整体结构的演化&#xff0c;演化过程涵盖…...

kubernetes存储-secrets

一、从文件创建 二、编写yaml文件 三、将Secret挂载到Volume中 四、向指定路径映射 secret 密钥 五、将Secret设置为环境变量 六、存储docker registry的认证信息...

Springboot使用EasyExcel导入导出Excel文件

1&#xff0c;准备Excel文件和数据库表结果 2&#xff0c;导入代码 1&#xff0c;引入依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifac…...

Pytorch L1,L2正则化

L1正则化和L2正则化是常用的正则化技术&#xff0c;用于在机器学习模型中控制过拟合。它们的主要区别在于正则化项的形式和对模型参数的影响。 L1正则化&#xff08;Lasso正则化&#xff09;&#xff1a; 正则化项形式&#xff1a;L1正则化使用模型参数的绝对值之和作为正则化…...

【Elasticsearch 未授权访问漏洞复现】

文章目录 一、漏洞描述二、漏洞复现三、修复建议 一、漏洞描述 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&am…...

pytorch笔记:PackedSequence对象送入RNN

pytorch 笔记&#xff1a;PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE-CSDN博客 当使用pack_padded_sequence得到一个PackedSequence对象并将其送入RNN&#xff08;如LSTM或GRU&#xff09;时&#xff0c;RNN内部会进行特定的操作来处理这种特殊的输入形式。 使用PackedSequ…...

C#WPF工具提示(ToolTip)实例

本文演示C#WPF工具提示(ToolTip)实例 ToolTip ToolTip是当鼠标移到某个控件上后可以弹出提示的控件 属性说明 1、HasDropShadow 决定工具提示是否具有扩散的黑色阴影,使其和背后的窗口区别开来 2、Placement 使用PlacementMode枚举值决定如何放置工具提示。默认值是M…...

每日更新源码:解锁商业项目新可能的密钥

在数字化转型浪潮席卷全球的今天&#xff0c;企业对于高效、安全、可定制化的技术解决方案需求愈发迫切。无论是初创公司快速搭建电商平台&#xff0c;还是传统企业升级官网提升品牌形象&#xff0c;源码下载网站已成为开发者与创业者获取核心资源的重要渠道。本文将深入探讨一…...

攻克表情显示难题:Noto Emoji企业级解决方案

攻克表情显示难题&#xff1a;Noto Emoji企业级解决方案 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 当你精心设计的聊天应用在用户手机上显示为"□□"乱码&#xff0c;当跨国团队的沟通因表情差异…...

SAP MM模块预留功能实战:从创建到发料的完整流程解析

SAP MM模块预留功能实战&#xff1a;从创建到发料的完整流程解析 在制造业和供应链管理领域&#xff0c;物料预留是确保生产计划顺利执行的关键环节。SAP MM模块中的预留功能&#xff0c;就像一位经验丰富的仓库管理员&#xff0c;能够提前为未来需求锁定必要的物料资源。想象一…...

为什么你的EventHandler仍触发装箱?C# 13 `ref delegate`与`unmanaged`委托语法(仅限.NET 8.0.3+ RTM)

第一章&#xff1a;为什么你的EventHandler仍触发装箱&#xff1f;C# 13 ref delegate与unmanaged委托语法&#xff08;仅限.NET 8.0.3 RTM&#xff09;即使在 .NET 8.0.3 RTM 中启用了 C# 13 的新委托特性&#xff0c;许多开发者仍观察到 EventHandler 回调中频繁发生值类型参…...

HowTo-易连EDI-EasyLink如何实现Email收发

在数字化通信时代&#xff0c;Email作为最基础的互联网服务之一&#xff0c;其背后依赖着一套复杂的协议体系来实现邮件的发送、接收和管理。这些协议构成了电子邮件系统的技术基础&#xff0c;确保了不同邮件服务提供商之间的互操作性。在易连EDI-Easylink系统中&#xff0c;E…...

Shell应用手册(一) 5 .终端连接与环境配置(SSH连接、命令行提示符含义)

对于后端开发者、运维工程师而言&#xff0c;终端是日常工作中最常用的工具之一。无论是远程管理服务器&#xff0c;还是本地调试程序&#xff0c;终端连接的稳定性、环境配置的合理性&#xff0c;直接影响工作效率。而SSH连接作为远程终端访问的核心方式&#xff0c;命令行提示…...

欧姆龙NJ/NXPLC 全ST程序案例,全程序无加密,公司级框架,锂电新能源行业FB库文件

欧姆龙NJ/NXPLC 全ST程序案例&#xff0c;全程序无加密&#xff0c;公司级框架&#xff0c;锂电新能源行业FB库文件&#xff0c;NJ Socket功能PC端作为服务器&#xff0c;NJ作为客户端&#xff0c;汇川机械人控制&#xff0c;设备状态机&#xff0c;设备PPM&#xff0c;运行时间…...

Vyper智能合约调试终极指南:5个高效故障排查技巧

Vyper智能合约调试终极指南&#xff1a;5个高效故障排查技巧 【免费下载链接】vyper Pythonic Smart Contract Language for the EVM 项目地址: https://gitcode.com/gh_mirrors/vy/vyper Vyper作为面向EVM的Pythonic智能合约语言&#xff0c;以其简洁安全的语法设计受到…...

DolphinScheduler 3.x 用户看过来:一个技巧,让你所有工作流自动继承“公司级”公共变量

DolphinScheduler 3.x企业级变量治理&#xff1a;打造零配置的智能工作流引擎 在数据团队协作中&#xff0c;变量管理就像空气——平时感觉不到它的存在&#xff0c;一旦缺失却寸步难行。想象这样的场景&#xff1a;财务部门突然要求所有报表改用新的财年起始日&#xff0c;开发…...

NPC逆变器开环仿真模型:适用于基础研究及多电平模型辨识算法验证,载波层叠调制与多种负载适应性探究

NPC逆变器开环MATLAB仿真模型 开环&#xff01;开环&#xff01;开环&#xff01; 适合基础研究 载波层叠调制、电阻负载 根据情况可以添加阻感负载、LCL滤波等 适合不同多电平模型辨识算法验证、故障诊断等工作&#xff01;最近在搞多电平逆变器的算法验证&#xff0c;发现开环…...