算法通关村第四关-青铜挑战基于链表完成栈

news2024/9/26 3:32:55

大家好我是苏麟 , 今天聊聊.

本期大纲

    • 栈的基础知识
      • 栈的特征
      • 栈的操作
      • Java中的栈
    • 基于链表实现栈

栈的基础知识

栈的特征

栈和队列是比较特殊的线性表,又称之为访问受限的线性表。栈是很多表达式、符号等运算的基础,也是递归的底层实现。理论上递归能做的题目栈都可以,只是有些问题用栈会非常复杂。

栈底层实现仍然是链表或者顺序表,栈与线性表的最大区别是数据的存取的操作被限制了,其插入和删除操作只允许在线性表的一端进行。

更好的理解栈 :

我们需要先举一个生活中的例子。栈就好比一个长的圆筒,圆筒一端封闭,另一端开口。往圆筒里放入乒乓球,先放入的靠近圆筒底部,后放入的靠近圆筒入口。
在这里插入图片描述
那么,要想取出这些乒乓球,则只能按照和放入顺序相反的顺序来取,先取出
后放入的,再取出先放入的,而不可能把最里面最先放入的乒乓球优先取出。
在这里插入图片描述
栈中的元素只能先入后出(First In Last Out,简称FILO)。最早进入的元素存放的位置叫作栈底(bottom),最后进入的元素存放的位置叫作栈顶(top).

栈的操作

入栈(压栈)

入栈操作(push)就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元
素的位置将会成为新的栈顶。

在这里插入图片描述

出栈(弹栈)

出栈操作(pop)就是把元素从栈中弹出,只有栈顶元素才允许出栈,出栈元素
的前一个元素将会成为新的栈顶。

在这里插入图片描述

Java中的栈

栈的常用方法主要有 :

  • push(E):增加一个元素E
  • pop0:弹出元素E
  • peek0:显示栈顶元素,但是不出栈
  • empty0:判断栈是否为空

我们在设计自己的栈的时候,不管用数组还是链表,都要实现上面几个方法

java的util中就提供了栈Stack类,使用不复杂,看一个例子就够了 .

   public static void main(String[] args) {
      Stack theStack = new Stack(); 
      theStack.push(10);
      theStack.push(20);
      theStack.push(30);
      theStack.push(40);
      theStack.push(50);
      while (!theStack.isEmpty()) {
         long value = theStack.pop();
         System.out.print(value);
         System.out.print(" ");
      }
      System.out.println("");
   }

基于链表实现栈

链表也可以实现栈,插入和删除都在头结点进行就可以了

在这里插入图片描述
简单的写了一下 , 大家可以根据自己的想法和业务逻辑自己编写

代码 :

package src.sl.stack;

public class MyStack {

    private static Node head = new Node(-100, null);

    /**
     * 节点
     */
    private static class Node {
        Integer val;
        Node next;

        public Node(Integer val, Node node) {
            this.val = val;
            this.next = node;
        }
    }


    /**
     * 压栈
     * @param value
     */
    public void push(Integer value) {
        //创建节点
        Node node = new Node(value, null);
        node.next = head.next;
        head.next = node;
    }


    /**
     * 判断是否为空
     * @return
     */
    public boolean empty(){
        if (head.next == null){
            return true;
        }
        return false;
    }

    /**
     * 返回当前元素的值
     * @return
     */
    public Integer peek(){
        if (head.next == null){
            return null;
        }
        return head.next.val;
    }

    /**
     * 删除栈顶元素 返回值
     * @return
     */
    public Integer pop(){
        boolean flag = empty();
        if (flag){
            return null;
        }
        int val = head.next.val;
        head.next = head.next.next;
        return val;
    }

}

测试 :

package src.sl.stack;

public class MyStackTest {
    public static void main(String[] args) {
        MyStack myStack = new MyStack();
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);


        while (!myStack.empty()){
            int peek = myStack.peek();
            System.out.println(peek);
            int pop = myStack.pop();
            System.out.println(pop);
        }

    }
}

这关就到这里 , 下一关见!

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

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

相关文章

进阶课5——人工智能数据分类

数据类型是指数据在计算机中的存储方式,根据数据的不同特征和表示方式,可以将数据分为不同的类型。在IT领域中,随着数字化信息技术的应用不断扩大,数据的种类和格式也越来越多。 从人机交互数据类型的视角来看,人工智…

RSA加密解密

生成公钥私钥: /*** RSA 生成公钥私钥*/ public class CreateSecrteKey {public static final String KEY_ALGORITHM "RSA";private static final String PUBLIC_KEY "RSAPublicKey";private static final String PRIVATE_KEY "RSAPri…

pytorch复现1_VGG

不涉及太多原理 VGG在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出,斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和 Classification Task (分类任务) 第二名。 网络亮点: 1.通过堆叠多个3x3的卷积核来替代大尺度卷积核…

腾讯云轻量应用服务器“镜像”怎么选择合适?

腾讯云轻量应用服务器镜像怎么选择?如果是用来搭建网站可以选择宝塔Linux面板腾讯云专享版,镜像系统根据实际使用来选择,腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器镜像的选择方法: 腾讯云轻量应用服务器镜像选择 轻量…

常熟,一座服装之城的三重升级

“姐妹你别看我瘦,我的肚子是这样,我115斤……你看我这个靴子,一穿就是会秒变大长腿的那种。” 晚上九点。大楼十层的走廊里,隐隐传来一个女性的声音。 如果你是她的157万粉丝之一,此时此刻打开抖音,就能…

8.3 矢量图层点要素单一符号使用四

文章目录 前言单一符号(Single symbol)渲染填充标记(Filled marker)QGis代码实现 总结 前言 上一篇教程介绍了矢量图层点要素单一符号中椭圆形标记(Ellipse marker)和字符标记(Font marker&…

【全志R128外设模块配置】USB外设功能配置

USB 外设功能配置 USB 功能简介 USB 功能模块包括了USB Host,USB Device 和OTG 功能。 USB Host 目前已经支持上的功能有:Mass Storage,UVC。 USB Device 目前已经支持上的功能有:ADB,UAC。 OTG 主要用作Host 与D…

极速指南:在 SpringBoot 中快速集成腾讯云短信功能

前言 今天分享一个SpringBoot集成腾讯云短信的功能,平常除了工作,很多xdm做自己的小项目都可能用到短信,但自己去看文档挺费劲的,我这边就帮你节省时间,直接把步骤给你列出来,照做就行。 实战 1、申请密…

python_PyQt5日周月K线纵向对齐显示_2_显示工具

目录 写在前面: 结果显示: 代码: 计算日数据、周数据,月数据,并返回 生成提示信息数据,同时将日周月合并到一个DataFrame中 返回K线图和成交量柱状图的数据 主界面,显示日周月对齐的K线图…

【思考】为什么要有随机分析,为什么要有频域变换

问:为什么要有随机分析,为什么要有频域变换? 答:因为原有的时域方法很难描述一些信号或噪声。 例如这样一个信号 如果要写出时域公式,简直是太复杂了,怎么描述它呢。一是从0时刻开始指数衰减。二是可以说…

基于SpringBoot的科研工作量管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能介绍 科研项目列表 项目论文信息管理 项目类型管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 四、系统测试 概要 系统测试的特点  系统功能测试 登录功能测试 添加项目类型功能测试 测试结果分…

微信一次性群发1000条消息:高效沟通的秘诀

在当今数字化时代,微信作为一款广受欢迎的社交应用程序,为人们提供了便捷的沟通方式。在微信中,一次性群发1000条消息似乎是一个不可能完成的任务,因为微信自带的群发功能是只能一次性最多群发200人的,那么有没有什么工…

uni-app打包之如何生成自由证书

我是使用Android Studio来直接生成。超级简单 第一步 打开 Android Studio 找到下面图片 第二步 选 Android App Bund 然后Next 第三步 选择创建新的 第四步 填写对应的 信息 密码最好都是一样的 第五步 点击ok 即可创建成功。 uniapp打包时候勾选文件 (如果公…

C语言 指针进阶笔记

p和*p: 如图&#xff0c;p是指针&#xff0c;指针存放着地址&#xff0c;打印出来应该是数组的值 *p是指针里里面的元素 #include<stdio.h> int main() {int a1;int b2;int c3;int p[3]{a,b,c};printf("%d",*p); return 0; } 那么现在的打印结果应该为数组的…

线程是如何创建的

线程不是一个完全由内核实现的机制&#xff0c;它是由内核态和用户态合作完成的。pthread_create 不是一个系统调用&#xff0c;是 Glibc 库的一个函数&#xff0c;所以我们还要去 Glibc 里面去找线索。 首先处理的是线程的属性参数。例如前面写程序的时候&#xff0c;我们设置…

一些关于weex编译apk的环境配置记录,成功打包weex app

背景 使用weex编译安卓app。老是会遇到一些配置问题&#xff0c;导致编译apk异常。 最后重新下载Android studio&#xff0c;配置好环境&#xff0c;再使用官网的命令&#xff0c;就编译成功了&#xff0c;下面是记录。 编译成功的环境 Java版本&#xff1a;jdk1.8.0_241 And…

深度学习_2 数据操作

数据操作 机器学习包括的核心组件有&#xff1a; 可以用来学习的数据&#xff08;data&#xff09;&#xff1b;如何转换数据的模型&#xff08;model&#xff09;&#xff1b;一个目标函数&#xff08;objective function&#xff09;&#xff0c;用来量化模型的有效性&…

AB试验(七)利用Python模拟A/B试验

AB试验&#xff08;七&#xff09;利用Python模拟A/B试验 到现在&#xff0c;我相信大家理论已经掌握了&#xff0c;轮子也造好了。但有的人是不是总感觉还差点什么&#xff1f;没错&#xff0c;还缺了实战经验。对于AB实验平台完善的公司 &#xff0c;这个经验不难获得&#…

记录一段帮朋友写的代码,使用牛顿-拉夫逊方法解方程

要求 已知公式&#xff1a; t G A B F r B r 2 2 F A 2 B G A F ln ⁡ ( r − A ) C o n s t t\frac{GAB}{F}r\frac{Br^2}{2F}\frac{A^2BGA}{F}\ln (r-A)Const tFGAB​r2FBr2​FA2BGA​ln(r−A)Const 其中 t 的值为0-1000&#xff0c;每间隔25取一次值A2.12941E-10B0.…