《java数据结构》--栈的详解

一.栈的认识

栈是一种不同于链表和顺序表的储存数据结构,它对存储数据和取出数据有着特殊的要求🤔。

首先栈只能从一端存储数据,也就是从一端进,还从这一端出这也是栈最大的特点,这也导致在栈中存取数据都必须遵循先进后出的原则😊,即先存入的数据只能最后拿出来,嗯🤔你可以把它想做一个细长的圆桶,你要往里放东西肯定是先放在最下面,当放满这个圆桶后你要再拿出刚开始放的那个,就必须把它上面的东西都拿出来才行。下面我来画图演示一下(画的不好请见谅🦊):

一般我们将栈用来存取的一端叫做栈顶,我们常常说取栈顶元素就是去取离栈顶最近的元素(也就是图中的3),另一端叫做栈底,向栈中存储数据叫做压栈,取出数据叫做出栈。

🐱以上就是关于栈的基本概念,接下来我们来自己实现一个栈,并进行增删查改😊。

二.栈的手动实现

因为栈不像顺序表和链表,可以随便访问到任意一个位置的数据,栈只能对栈顶元素进行操作并且遵循先进后出原则。那具体怎么操作呢🧐,接着看😉。

1.创建栈🐱

栈可以用数组来实现也可以用链表来实现

数组栈:用数组实现比较方便,而且再尾部插入和删除的代价小时间复杂度为O(1),且没有其他额外开销。这种实现方式适合于栈的常见操作,如进栈和出栈,因为这些操作在数组的尾部进行,效率较高。然而,数组的缺点是大小固定,需要预先分配足够的空间,且在栈满时无法动态扩展。

链表栈:可以灵活地添加或删除元素,无需预先分配固定大小的存储空间。链表栈通过维护一个指向栈顶元素的引用(头插,头删),可以实现快速的进栈和出栈操作。然而,链表在实现栈时,每个元素都需要额外的空间来存储指向下一个元素的引用,这可能导致空间上的开销。

具体使用哪种更据具体需要😊

博主这里使用数组来实现栈😊

2.判断是否压满🐱

方法和顺序表一样直接判断数组长度和栈内元素数量是否相同

3.压栈🐱

压栈的操作其实很容易实现首先还是和顺序表一样先判断是否扩容,然后直接在最后插入一个数据即可😉

4.出栈🐱

博主这里设定如果栈为空就抛出一个错误

出栈操作依然简单😸,让数据容量减一,然后返回栈顶元素就行😼

5.获取栈顶元素🐱

到这里你应该已经可以自己完成这个操作了吧😸,试着自己操作一下吧,实现方法和出栈类似。

6.获取长度和判空🐱

7.打印栈的元素🐱

到这里我们栈的内容就聊完了😋,如果你有什么不懂得地方或者其他见解,欢迎在下方评论或者私信博主,最后也希望可以多多支持一下博主🥰🥰!!!下一篇我们来聊一聊队列😸🙉

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

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

相关文章

C++线程任务队列模型

功能描述 实现一个任务队列,用于任务的执行 任务队列 任务队列可以添加、删除任务,实现对任务的管理添加任务后,任务队列可以开始执行任务队列执行任务方式为串行执行 任务 任务执行需要持续一段10s内随机的时间,执行过程通过…

打造爆款活动:确定目标受众与吸引策略的实战指南

身为一名文案策划经理,我深知在活动策划的海洋中,确定目标受众并设计出能触动他们心弦的策略是何等重要。 通过以下步骤,你可以更准确地确定目标受众,并制定出有效的吸引策略,确保活动的成功: 明确活动目…

【Oracle篇】rman标准化全库备份策略:完整备份or增量备份(第三篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

单元测试框架Pytest的基本操作

Pytest基本操作 1. 详解1.1 命名规则:1.2 自定义查找规则:1.3 3种运行方式1.4 执行顺序2. 断言2.1 定义2.2 断言的规则3. mark3.1 mark的作用3.2 mark的标记方式3.3 注册标签名3.4 skip跳过标记4. pytest的参数化5. pytest的夹具(fixture测试夹具)5.1. 作用5.2. 夹具应用场…

web前端框架设计第十一课-常用插件

web前端框架设计第十一课-常用插件 一.预习笔记 1.路由的基础使用 2.动态路由 3.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药,犹豫拖延将不断滋养恐惧

Web渗透-MySql-Sql注入:联合查询注入

SQL注入(SQL Injection)是一种网络攻击技术,攻击者通过将恶意的SQL代码插入到应用程序的输入字段,从而欺骗应用程序执行未经授权的操作。这种攻击方式可以导致严重的安全问题,包括: 数据泄露:攻…

UE5 UE4 快速定位节点位置

在材质面板中,找到之前写的一个节点,想要修改,但是当时写的比较多,想要快速定位到节点位置. 在面板下方的 Find Results面板中,输入所需节点,找结果后双击,就定位到该节点处。 同理,…

【CUDA】Nsight profile驱动的CUDA优化

前置准备 安装NVIDIA Nsight Compute。 安装好后选择使用管理员权限启动下载官方 Demo 代码官方博客Shuffle warp 1. 任务介绍及CPU版本 1.1 任务介绍 任务理解: 有一个 L x M 的矩阵 M 1 M_1 M1​ 对其每行取平均值 得到 V 1 ∈ R L 1 V_1 \in \mathbb{R}^{…

pikachu—exec“eval“

这是原画面 然后呢? 我们知道会传入到后台rce_eval.php来处理然后通过 eval()是啥? 在eval括号里面可以执行外来机器的命令 然后我们通过php的一个内置的命令 我们通过phpinfo(); 这是输入后的结果

(四十八)第 7 章 图(图的数组(邻接矩阵)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

《python编程从入门到实践》day41

# 昨日知识点回顾 用户注销、注册&#xff0c;限制访问&#xff0c;新主题关联到当前用户 # 今日知识点学习 第20章 设置应用程序的样式并部署 20.1 设置项目“学习笔记”的样式 20.1.1 应用程序django-bootstrap4 # settings.py ---snip--- INSTALLED_APPS [# 我的应用程序…

链式法则:神经网络前向与反向传播的基石

在深度学习的浪潮中&#xff0c;神经网络以其强大的学习和预测能力&#xff0c;成为解决复杂问题的有力工具。而神经网络之所以能够不断学习和优化&#xff0c;离不开两个核心过程&#xff1a;前向传播和反向传播。其中&#xff0c;链式法则作为微积分学中的一个基本概念&#…

(C11) 泛型表达式

文章目录 ⭐语法⭐举例&#x1f6a9;判断对象类型&#x1f6a9;判断指针&#x1f6a9;函数重载&#x1f6a9;嵌套使用 END ⭐语法 Ref: 泛型选择 (C11 起) - cppreference.com 关键词&#xff1a; Genericdefault _Generic(控制表达式 , 关联列表) (C11 起) 关联列表 类型名:…

PHP:phpmyadmin 将查询数据导出csv

1、输入你的SQL查询出结果 2、查出数据以后拖到最下方【导出】 3、导出CSV

京东二面:Sychronized的锁升级过程是怎样的

引言 Java作为主流的面向对象编程语言&#xff0c;提供了丰富的并发工具来帮助开发者解决多线程环境下的数据一致性问题。其中&#xff0c;内置的关键字"Synchronized"扮演了至关重要的角色&#xff0c;它能够确保在同一时刻只有一个线程访问特定代码块或方法&#…

新书速览|Golang+Vue.js商城项目实战

架构师一步一步教你做项目&#xff0c;从架构设计到技术实现完整解析 本书内容 《GolangVue.js商城项目实战》以Gin和Vue.js为核心框架&#xff0c;以全栈商城项目开发为主线&#xff0c;详尽介绍前后端分离架构开发Web网站项目的关键阶段和技术细节。全书共9章&#xff0c;第…

多模态MLLM都是怎么实现的(9)-时序LLM是怎么个事儿?

时序预测这东西大家一般不陌生,随便举几个例子 1- 金融,比如预测股票(股市有风险,入市需谨慎),纯用K线做,我个人不太推荐 2- 天气,比如预测云图,天气预报啥的 3- 交通,早晚高峰,堵车啥的,车啥时候加油,啥时候充电之类的 4- 医疗,看你病史和喝酒的剂量建模,看你会…

华为实训课笔记 2024

华为实训 5/205/215/225/235/275/28 5/20 5/21 5/22 5/23 5/27 5/28

BLE蓝牙模块在车联网中的智能开锁、数据监控应用

随着科技的不断发展&#xff0c;车联网已经成为了汽车行业的一个热门话题。在这个领域中&#xff0c;BLE蓝牙模块发挥着重要的作用&#xff0c;特别是在智能开锁和数据监控方面的应用。本文将详细介绍BLE蓝牙模块在这两个方面的应用及其优势。   一、智能开锁   1.车辆远程…

【调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包】

调试笔记-系列文章目录 调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包 文章目录 调试笔记-系列文章目录调试笔记-20240528-Linux-用 OpenWrt-23.05 SDK 编译 frp 软件包 前言一、调试环境操作系统&#xff1a;Ubuntu 22.04.4 LTS编译环境调试目标 二、调试步…