栈的基本操作

news2024/11/16 15:48:38

目录

一、什么是栈?

 二、用单链表实现栈

 三、用顺序表数组实现栈


一、什么是栈?

·栈(stack)是一个先进后出(FILO-First In Last Out)的有序列表。

·主要方法:入栈(push)、出栈(pop)

·允许插入和删除的一端为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。

·先放入到栈的元素在栈底,后放入栈的元素为栈顶。栈顶的元素先出,栈底的元素后出。

·栈的应用场景:(1)递归问题的处理(2)表达式的转换,例如括号、计算器。(3)二叉树的遍历(4)图的深度优先遍历

 二、用单链表实现栈

思路:用链表的方式实现栈
将插入的结点插入到第一个结点位置,如果插入到链表的尾部的话,虽然插入尾部可以后进先出,但每次拿到元素都要遍历到链表的尾部,效率太低了,所以将结点插入到链表头部,每次从链表头部获取结点,达到后进先出的效果。 

 代码实现:

package Stack;

public class MyLinkedStack<T> {

    //定义链表结点
    public class Node{
        T item;//存储数据
        Node next;
        public Node(T item, Node node) {
            this.item = item;
            this.next = node;
        }
    }

    //定义头结点
    Node head;
    //定义栈的长度
    int size;
    //初始化头结点、栈的长度

    public MyLinkedStack() {
        head = new Node(null,null);
        size = 0;
    }

    //定义入栈方法
    //思路:用链表的方式实现栈
    //     将插入的结点插入到第一个结点位置,如果插入到链表的尾部的话,
    //     虽然插入尾部可以后进先出,但每次拿到元素都要遍历到链表的尾部,
    //     效率太低了,所以将结点插入到链表头部,每次从链表头部获取结点,达到后进先出的效果。
    public void push(T t){
        //获取第一个结点
        Node first = this.head.next;
        //创建插入的结点
        Node node = new Node(t,null);
        //将需要插入的结点指针指向第一个结点
        node.next = first;
        //将头结点指针指向插入的结点
        this.head.next = node;
        //链表的长度加一
        this.size++;
    }

    //定义出栈方法
    public T pop(){
        //获取第一个结点
        Node first = this.head.next;
        //获取第二个节点
        Node second = first.next;
        //取出第一个结点,将头结点指向第二个节点
        this.head.next = second;
        //链表的长度减一
        this.size--;
        //return获取结点
        return first.item;
    }
}

 三、用顺序表数组实现栈

 这里讲一下思路即可,代码实现先不贴上去哈。

思路:数组实现的原理很简单,每次插入元素都放在数组的尾部,每次获取元素也从数组尾部获取即可。

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

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

相关文章

SCA算法优化脉冲耦合神经网络的图像自动分割(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【C语言】初识指针(终篇)

摸了一手秀发&#xff0c;发现还在~ 目录 1、指针运算 1.1指针加减整数 1.2指针减指针 1.3指针关系运算 2、二级指针 3、指针和数组 4、指针数组 前言&#xff1a; 大家好&#xff0c;我是拳击哥。上一期我们讲到了指针类型&#xff0c;指针的访问步长&#xff0c;野指针…

Redis数据类型总结

文章目录一、5种数据类型二、常用指令汇总三、应用汇总提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 一、5种数据类型 Redis 数据存储格式&#xff1a;  ● redis 自身是一个 Map ,其中所有的数据都是采用 key : value 的形式存储。  ● 数…

如何设计用户体验测试用例

一、 什么是用户体验 UE&#xff1a; User Experience 用户体验。 用户体验是指用户在使用产品过程中的个人主观感受&#xff0c;即用户在使用一个产品之前、使用过程中、使用后的整体感受&#xff0c;包括行为、情感、喜好、生理和心里反应、成就等各个方面。 通俗的讲用户体…

希望所有计算机学生都知道这些宝藏网站

GitHub GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。 作为开源代码库以及版本控制系统&#xff0c;Github拥有超过900万开发者用户。随着越来越多的应用程序转移到了云上&#xff0c;Github已…

数据结构与算法(五) 动态规划

这篇文章来讲动态规划&#xff08;Dynamic Programming&#xff09;&#xff0c;这是一个在面试中很经常出现的题型 1、本质 之前说过&#xff0c;解决算法问题的主流思路就是穷举搜索&#xff0c;即遍历整个搜索空间&#xff0c;找到给定问题的解 只是在某些场景下&#xff…

Python学习 - 异常处理

Python学习 - 语法入门&#xff1a;https://blog.csdn.net/wanzijy/article/details/125287855 Python学习 - 数据类型&#xff1a;https://blog.csdn.net/wanzijy/article/details/125341568 Python学习 - 流程控制&#xff1a;https://blog.csdn.net/wanzijy/article/details…

3dmax网渲云渲染哪个平台费用低?一张图要多少钱多长时间?怎么收费

话说现在的设计师应该没有不知道云渲染的吧&#xff1f;毕竟比起本地渲&#xff0c;云渲染不占本地资源&#xff0c;一次能渲很多张&#xff0c;方便又快捷&#xff0c;有谁不喜欢呢&#xff01;那么这么多的云渲染平台用哪个呢&#xff1f;今天我们就以主流的4个平台为例&…

(STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(4)使用LVGL

上一篇&#xff1a; (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(3)使用DMA 经过前几章的搭建&#xff0c;底层显示已经没有问题了&#xff0c;现在需要添加上层的库&#xff0c;我选择了比较火的开源GUI库--LVGL。而RT-Thread Studio支持直接添加LVGL代码库的。 在RT-T…

人工智能-4计算机视觉和图像处理01

深度学习简介 机器学习是实现人工智能的一种途径&#xff0c;深度学习是机器学习的一个子集 深度学习相比于机器学习&#xff0c;少了‘手动特征提取’部分&#xff0c;交给网络来处理 深度学习流程&#xff1a;数据输入–训练模型&#xff08;在数据中学习&#xff09;–输出预…

IP请求工具

无缝的 IP 分配和管理 手动将不同子网中的 IP 分配给不同的 IT 管理员&#xff0c;同时遵守配置的不同访问级别可能是一项繁琐的任务。为了简化IP请求和分配的过程&#xff0c;OpUtils为您提供了一个内置的IP请求工具。使用此工具&#xff0c;您的网络管理员不必再等待其 IP 请…

数据库笔记

文章目录01 数据库概述1.1 四个基本概念1.2 数据管理技术的三个阶段1.2.1 人工管理阶段1.2.2 文件系统阶段1.2.3 数据库阶段1.3 数据独立性1.4 数据库的三级模式结构1.4.1 三级模式结构1.4.2 数据库的二级映像与数据独立性02 关系数据库2.1 关系数据结构及形式化定义2.1.1 关系…

论文管理系统(增删查改功能的实现)

目录 一、后端 1.1实体类 1.2paperMapper类 1.3 PaperMapper类 1.4Service层 1.5 Controller层 二、前端 源代码 我们已经实现列表数据了,接下来我们将实现增删查改功能,新增和修改还能够回显 一、后端 1.1实体类 实体类还是我们上一版的列表功能的实现的paper实…

IFD-x 微型红外成像仪探测距离说明

红外热成像仪是用光学镜头来收集被测物体的热辐射能量的&#xff0c;故此探测距离会受镜头视场角 和热成像像素分辨率有关。 假如某成像仪的成像分辨率为 32*32 像素&#xff0c;视场角为 75 度&#xff0c;则可以理解为从镜头发射出 32*321024 条激光来探测 1024 个点的…

数据结构初阶:队列

目录 一、队列的概念和结构 二、队列的实现 定义队列结构 初始化队列 销毁队列 检测队列是否为空 入队列 出队列 获取队列头部元素 获取队列队尾元素 获取队列中有效元素个数 优化 三、测试 四、优化后的全部代码 一、队列的概念和结构 队列:只允许在一端进行插入数据操作…

【区块链】用Python实现一条区块链

用Python实现一条区块链 点击链接获取可执行文件 本文使用 python 实现了一条简单的区块链。主要分两个模块&#xff1a;实现每个区块的结构和相关的方法、实现整条区块链的结构和相关的方法。下面是对这两个模块的描述。 每个区块主要包括两个成员&#xff1a;区块头和区块…

GlobalWebsoket.js 的使用,实现获取实时数据

在称重小程序是使用 GlobalWebsoket 实现获取实时数据前言一、逻辑分析二、实现方式1.方法整体流转分析 -- 初始化并绑定1. onLoad1. init2. getDeviceInfo3. initWebSocket4. setProperties2.方法整体流转分析 -- 解除绑定1. onBackPress2. remoeSubscribe三、参数调用分析四、…

“大数据分析”相比“传统数据分析”优势明显,体现在哪些方面

一、大数据和数据分析的定义&#xff1a; 数据分析&#xff1a;指使用适当的统计分析方法来收集数据&#xff0c;以进行大量数据分析。 大数据分析&#xff1a;指在可承受的时间范围内无法使用常规软件工具捕获&#xff0c;管理和处理的数据集合&#xff1b; 数据分析的核心…

【web渗透思路】任意账号的注册、登录、重置、查看

目录 一、任意用户注册 1.未验证邮箱/手机号 2、不安全验证邮箱/手机号 3.批量注册 4.个人信息伪造 5.前端验证审核绕过 6.用户名覆盖 二、任意用户登录 1、万能密码 2、验证码、密码回显 3、登录检测不安全 三、任意账号重置 1、重置账号名 2、验证码 3、MVC数…

2022年第三季度泛出行行业洞察:泛出行行业正在经历数智化升级的关键时期,用户规模保持平稳增长,行业整体良性发展

易观分析&#xff1a;泛出行行业涵盖综合车主服务、车辆加油充电、网约车、旅游预定、酒店预定、户外出行等领域。当前泛出行领域正在经历传统模式向数智化新模式的转变&#xff0c;智能化升级和服务品质提升在该领域变革中正发挥着积极的作用。未来泛出行领域将在数智化、电动…