栈的简介与实现(Java)

news2024/11/18 7:43:40

一、简介

栈 (Stack) 只允许在有序的线性数据集合的一端(称为栈顶 top)进行加入数据(push)和移除数据(pop)。因而按照 后进先出

一般作用于深度搜索

假设堆栈中有n个元素。
访问:O(n)//最坏情况
插入删除:O(1)//顶端插入和删除元素

利用栈的数据结构可以实现浏览器前进和后退

我们只需要使用两个栈(Stack1 和 Stack2)和就能实现这个功能。比如你按顺序查看了 1,2,3,4 这四个页面,我们依次把 1,2,3,4 这四个页面压入 Stack1 中。当你想回头看 2 这个页面的时候,你点击回退按钮,我们依次把 4,3 这两个页面从 Stack1 弹出,然后压入 Stack2 中。假如你又想回到页面 3,你点击前进按钮,我们将 3 页面从 Stack2 弹出,然后压入到 Stack1 中。示例图如下:

图片源于JavaGuide

二、使用数组实现一个栈

public class Stack {
	//声明一个数组
	private int[] arr;
	//声明头结点
	private int flage = 0;
 
	public Stack(int size) {
		arr = new int[size];
	}
 
	//元素入栈
	public void add(int x) {
		//判断栈是否已满
		if (flage == arr.length) {
			//如果满了,实现扩容
			int[] brr = new int[arr.length * 2];
			for (int i = 0; i < arr.length; i++) {
				brr[i] = arr[i];
			}
			arr = brr;
		}
		arr[flage] = x;
		flage = flage + 1;
	}
 
	//元素出栈
	public Integer get() {
		if(flage == 0) {
			return null;
		}
		int re = arr[flage-1];
		flage = flage -1;
		return re;
	}
}

 

 

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

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

相关文章

一文学会Python安装和基础语法-全程干货

安装Python程序 官网Python下载地址&#xff1a;Python Releases for Windows | Python.org 安装3.7版本即可&#xff0c;版本升级可能会有较小的改动&#xff0c;下面要学习的都以python3.7为例 下载安装包之后直接双击无脑安装即可 新手经常遇到的问题&#xff1a; 1.符号…

基于VUE框架的旅游平台-计算机毕设 附源码82070

基于VUE框架的旅游平台 摘 要 改革开放以来&#xff0c;我国的旅游业有了非常迅速的发展&#xff0c;但是比较而言&#xff0c;我国国内旅游业发展的广度深度都远远不能适应经济发展和人民生活水平提高的需要。随着市场经济的发展和人民收入水平的进一步提高&#xff0c;人民对…

『Vue组件』全局注册与局部注册及组件命名

一、组件注册的方式 在Vue中组件的注册一般可以分为两种方式&#xff0c;你可以在main.ts或globalComponents.ts等统一管理文件中对公共组件进行注册。也可以在父组件中引入组件并在components属性中对组件进行按需注册&#xff08;OptionsAPI&#xff09;&#xff0c;这样便可…

漏洞复现 飞视美 视频会议系统 Struts2 远程命令执行漏洞

0x01 阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&…

Grafana任意文件读取漏洞(CVE-2021-43798)

Grafana任意文件读取漏洞&#xff08;CVE-2021-43798&#xff09; 一、漏洞描述 Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后&#xff0c;Grafana可以在网络浏览器里显示数据图表和警告。 二、漏洞影响范围 影响版本&#xff1a; Gr…

antv-g6—在vue项目中实现网格拓扑流程图自定义绘制

实现效果图 这个是自己写着玩的&#xff0c;利用antv/g6自定义绘制流程图&#xff0c;然后保存到localstorage中&#xff0c;在左侧表格展示&#xff0c;还可以通过表格操作来查看对应的流程图以及删除&#xff1b; 这里特别注意一下&#xff0c;antv/g6版本是1.2.8&#xff0…

ModaHub魔搭社区:向量数据库MIlvus服务端配置(二)

目录 storage 区域 wal 区域 cache 区域 storage 区域 | 参数 | 说明 | 类型 | 默认值 | | ——————————————- | —————————————————————————————— | ——————————————————————————————- | ————…

解决 mac 系统报zsh: command not found: npm 问题

文章目录 1、报错zsh: command not found: npm2、解决办法 1、报错zsh: command not found: npm 根据提示&#xff1a;zsh: command not found: npm。说明没有找到 npm 命令&#xff0c;这说明有两种情况&#xff1a; 一是&#xff1a;你根本就没有安装 nodejs 的环境&#xf…

git add 时报错 warning: in the working copy of ‘package-lock.json‘, LF will...

问题&#xff1a; 执行git add . 时报错 原因&#xff1a; 换行符的问题&#xff0c; Windows下换行符和Unix下的换行符不一样&#xff0c;git会自动转换。 解决办法&#xff1a; 执行命令&#xff1a; git config --global core.autocrlf false 问题解决&#xff1a;

Windows网络服务综测刷题

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 前言 本章将会讲解Windows网络服务的刷题 一.刷题 在Windows Server 2016系统中&#xf…

【openpyxl】总结最近使用到的openpyxl方法

这里写自定义目录标题 单元格嵌入图片调节行高和列宽合并单元格自动换行按列插入数据tableWidget数据导出到excel 单元格嵌入图片 from openpyxl.drawing.image import Image from openpyxl.drawing.spreadsheet_drawing import AnchorMarker, TwoCellAnchor from openpyxl.wor…

Excel / PPT 办公技巧

Excel sum求和 我们先选中某个单元格单元格&#xff0c;并在编辑栏输入&#xff1a;SUM&#xff08;&#xff09;&#xff0c;然后输入函数参数&#xff1a;B2&#xff1a;B9&#xff0c;最后按回车键结束确认&#xff0c;即可计算出销量总和&#xff1b; PPT 组合 选中需要…

2023-01-09 DBeaver链接postgresql.md

DBeaver连接postgresql 驱动不存在 Maven artifact maven:/net.postgis:postgis-jdbc:RELEASE not found 解决方法&#xff1a;窗口--->首选项--->驱动--->Maven http://maven.aliyun.com/nexus/content/groups/public/

【ORA-01745: invalid host/bind variable name】

mybatis插入sql错误&#xff0c;一开始没注意他的sql 根据错误信息 ORA-01745: 无效的主机/绑定变量名一查 全是 什么批量插入数据过多导致的 实际上我这个不是

LeetCode刷题 | 70. 爬楼梯、322. 零钱兑换、279. 完全平方数

70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示…

怎么用云猫转码工具在线转换视频格式

我们平时在剪辑视频的时候&#xff0c;经常需要处理各种各样的视频格式&#xff0c;大家平时可以通过将不同的视频格式进行转换&#xff0c;就可以获得到更多的视频格式类型&#xff0c;那么有什么好用的工具可以快速转换视频格式的么&#xff1f; 推荐使用云猫转码工具在线转…

八大排序算法——(万字图文详解)

本篇文章是我对之前写过的八个排序算法的总结&#xff0c;感兴趣的小伙伴可以去我的八大排序算法专栏浏览&#xff0c;也可以点击下方标题跳转。 提示&#xff1a;本篇博客篇幅较长&#xff0c;建议小伙伴们查看目录&#xff0c;按需浏览 目录 正文 1 直接插入排序 2 希尔…

JAVA关于异常的处理

1.throw和throws public static int score(int math,int chinese) throws Exception {if(math < 0 || chinese < 0){throw new Exception();}return (mathchinese)/2;}从这里看&#xff0c; throw是在方法体中处理异常的&#xff0c;抛出&#xff0c;这个时候&#xff0…

centos7 解决 IP自动变化的问题

进入&#xff1a;cd /etc/sysconfig/network-scripts/ 找到&#xff1a;ircfg-ens33 文件 vi 打开 BOOTPROTO“static” IPADDR192.168.98.130 //设置的本机ip&#xff0c;需和网关在同一网段 192.168.234.xxx NETMASK255.255.255.0 子网掩码 设置好后 :wq systemctl restart…

Linux下Redis 6.2.6安装和部署详细图文步骤

目录 1、下载redis6.2.6安装包2、解压压缩文件3、重命名和移动文件4、redis编译安装1&#xff09;redis编译&#xff0c;执行make命令。2&#xff09;redis安装执行make install命令。 5、redis启动6、设置后台启动redis7、设置redis密码8、设置redis服务远程访问1、防火墙添加…