数据结构入门之用链表模拟栈

1:栈的介绍:

  • LIFO(last in first out)表示就是后进入的元素, 第一个弹出栈空间.往往先把拿出去使用.

  • 其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

  • 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
  • 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2:实现代码:

链表定义:

//模拟链表
class Node {
    //个数
    public int no;
    //节点
    public Node next;

    public Node(int no) {
        this.no = no;
    }

    public Node(int no, Node next) {
        this.no = no;
        this.next = next;
    }
}

栈定义:

/**
 * 用链表模拟栈
 */
public class StackDemo {
    //栈的大小
    int maxSize;
    Node header;//栈顶元素
    int noCount;//栈内元素个数

    //初始化
    public StackDemo(int maxSize) {
        this.maxSize = maxSize;
        header = null;
        noCount = 0;
    }

    //判断栈满
    public boolean isEop() {
        if (maxSize == noCount) {
            return true;
        }
        return false;
    }

    //判断栈是否有值
    public boolean isEmpt() {
        if (noCount == 0) {
            return true;
        }
        return false;
    }

    //入栈
    public void push(int node) {
        if (isEop()) {
            System.out.println("栈满");
            return;
        }
        //注意这里面试将原来的header作为参数传入,然后以新new出来的Node作为header
        header = new Node(node, header);//node是数据,header是下一个节点
        noCount++;//个数加一
    }

    //出栈
    public int pop() {
        if (isEmpt()) {
            throw new RuntimeException("栈空");
        }
        //获取数据
        int no = header.no;
        //移向下个节点
        header = header.next;
        noCount--;
        return no;
    }

    //遍历
    public void list() {
        if (isEmpt()) {
            System.out.println("没有数据");
            return;
        }
        Node temp = header;//辅助节点 遍历用
        while (true) {
            if (temp == null) {
                break;
            }
            System.out.println(temp.no);
            //下移
            temp = temp.next;
        }
    }
}

因为在备考学校,数据结构入门基本会形成全套的代码实现

Original: https://www.cnblogs.com/yunjie0930/p/15193252.html
Author: 小杰i
Title: 数据结构入门之用链表模拟栈

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/576398/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java韩顺平

    慢慢更新 什么是程序 程序是有序指令的集合 CMD编译执行Java文件 编译:javac 文件名.java执行:java 文件名 文件夹地址栏 输入 CMD 弹出本文件夹命令行 J…

    数据库 2023年6月11日
    060
  • MySQL 索引排序

    表结构和数据 CREATE TABLE t1 ( id int(11) NOT NULL AUTO_INCREMENT, a int(11) DEFAULT NULL, b int…

    数据库 2023年5月24日
    082
  • Maven项目添加外来jar包

    本例: 是为了读取Excel文件并把数据录入数据库,从数据库读写数据 写入Excel文件 用到的jar包:mysql—-poi Original: https://ww…

    数据库 2023年6月9日
    078
  • Idea新建一个springboot的项目

    1、 2、 3、 4、 5、新建yml文件 6、如果没有这个yml文件没有变成绿叶标的话 如下操作添加即可 一般过一会就好了 Original: https://www.cnblo…

    数据库 2023年6月9日
    0102
  • 对象映射时 Integer 类型字段转换枚举处理麻烦 一个工具类搞定

    使用场景 当我们返回给前端所需的对象数据时,大多数情况可以直接使用 StructMap 映射实现自动转换,但碰到对象中的某些字段需要从 Integer 类型转换成对应枚举的时候,在…

    数据库 2023年6月6日
    073
  • NO.5 MySQL-笔记

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    086
  • MYSQL–>SQL优化

    Insert优化 优化原因:MYSQL数据库中insert每执行一次都会对数据库进行一次连接,会浪费很大资源。 优化方案: 批量插入 插入数据的时候尽量一次性批量插入多个数据而不是…

    数据库 2023年6月14日
    091
  • [转]failed to recv data in handshakeReceive2Callback

    一直用的好好地Shadowsocks今天突然发现打不开网页了,看了下日志发现被”failed to recv data in handshakeReceive2Call…

    数据库 2023年6月14日
    087
  • 计算机网络 | TCP 连接的建立 和 TCP 连接的断开

    TCP 连接的建立过程 一开始,客户端和服务端都处于 close 状态。 先是服务端监听某个端口,此时服务端处于 listen 状态。 这个时候客户端就可以发送连接请求报文了。 第…

    数据库 2023年6月11日
    0127
  • vs2022升级后打开项目报错预定义类型system.void未定义或导入”

    今天打开项目,vs2022提示升级,于是我就点了升级,升级完成后,再次打开项目,代码中就出现了很多红线,提示 如下错误,还有很多其他类似的错误 大概意思就是 mscorlib.dl…

    数据库 2023年6月9日
    0142
  • MySQL实战45讲 1,2

    01 | 基础架构:一条SQL查询语句是如何执行的? Server 层 所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取。其架构模…

    数据库 2023年6月16日
    072
  • 线程池:ThreadPoolExcutor源码阅读

    ThreadPoolExcutor源码流程图:(图片较大,下载再看比较方便) 线程池里的二进制奥秘 前言: 线程池的五种状态state (RUNNING 、SHUTDOWN 、ST…

    数据库 2023年6月16日
    0117
  • Python环境安装

    一、下载地址: Python:Download Python | Python.org PyCharm:Download PyCharm: Python IDE for Profe…

    数据库 2023年6月14日
    074
  • 项目主干分支的server.sh被“覆盖”了?一个配置,解除烦恼

    我司项目利用springboot搭建,应用在部署到各环境后,程序启动命令靠的是我们在工程里配置的 scripts/server.sh。这个server.sh里最重要的东西是程序启动…

    数据库 2023年6月9日
    0109
  • web监听器解析

    监听器是web三大组件之一,事件监听机制如下: 事件:某个事件,如果初始化上下文 事件源:事件发生的地方 监听器:一个对象,拥有需要执行的逻辑 注册监听:将事件、事件源、监听器绑定…

    数据库 2023年6月16日
    082
  • 如何使用原生的Hystrix

    什么是Hystrix 前面已经讲完了 Feign 和 Ribbon,今天我们来研究 Netflix 团队开发的另一个类库–Hystrix。 从抽象层面看, Hystri…

    数据库 2023年6月6日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球