当前位置: 首页 > article >正文

深入理解数据结构(1)—用链表实现栈

栈是一种数据结构,链表也是一种数据结构。它们都是由基础的语法实现的。

如果一个数据结构可以用另外的数据结构来实现,那么可以有力的证明——“数据结构是一种思想”,是一种讲语法组合起来实现某种功能的手段

一、栈的特点——要实现哪些功能?

既然要用链表来模拟栈,那么要实现哪些功能?

  1. 栈是一种特殊的线性表,只允许在固定一端进行插入和删除元素操作
  2. 后进先出

那么对于这两个特性,我们可以做出如下设想:

在使用单链表的情况下,从头部插入——模拟入栈,头部删除——模拟出栈。同时这样操作满足了时间复杂度O(1)

每次向栈中插入一个元素,就是向这个链表前端插入一个新的“head”;

每次从栈中弹出一个元素,就是从链表头部删除一个“head”,然后“head = head.next”;

二、代码实现 

public class MyStack {
    /*创建链表的节点*/
    static class Node{
        public int val;
        public Node next;

        public Node(int val){
            this.val = val;
        }
    }
    public Node head;
    public int size;

    //实现入栈方法
    public void push(int val){
        Node node = new Node(val);
        /*如果此时链表中没有节点,那么将node设为head,并将有效元素个数size加1
        * 如果链表中已经有元素的话,将node节点头插到head节点前,并设为head*/
        if (size == 0){
            head = node;
        }else {
            node.next = head;
            head = node;
        }
        size++;
    }
    //实现出栈方法
    /*返回当前头节点的值,并将头节点后移*/
    public int pop(){
        int h = head.val;
        head = head.next;
        size--;
        return h;
    }
    //获取栈顶元素的peek方法
    public int peek(){
        return head.val;
    }
    //判断栈是否为空
    public boolean empty(){
        return size == 0;
    }

    public static void main(String[] args) {
        MyStack stack = new MyStack();
        stack.push(12);
        stack.push(24);
        stack.push(26);
        stack.push(58);
        int b = stack.pop();
        int a = stack.peek();
        System.out.println(b);
        System.out.println(a);

    }
}

 


http://www.kler.cn/a/105830.html

相关文章:

  • Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失
  • 技术速递|Microsoft.Extensions.VectorData 预览版简介
  • MySQL时间字段TIMESTAMP和DATETIME
  • 鸿蒙北向开发环境安装指南
  • 学者观察 | 元计算、人工智能和Web 3.0——山东大学教授成秀珍
  • 理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作
  • RN读写json文件
  • 汽车托运是怎样收费
  • Windows平台下将exe及其dll封包到新的exe
  • 【Java 进阶篇】Java HTTP 请求消息详解
  • 分享119个ASP.NET源码总有一个是你想要的
  • 如何通过内网穿透实现公网远程连接Redis数据库
  • 如何将Mysql数据库的表导出并导入到另外的架构
  • 2023年Q3企业邮箱安全性报告:境内钓鱼邮件超过境外攻击
  • JavaScript手写题
  • 数据结构与算法之排序: 快速排序 (Javascript版)
  • Centos磁盘问题小纪
  • 扩展 Calcite 中的 SQL 解析语法
  • 基于STM32设计的万能红外遥控器(学习型)
  • CSS色域、色彩空间、CSS Color 4新标准 | 京东云技术团队
  • 【IO面试题 一】、介绍一下Java中的IO流
  • redis缓存击穿 穿透
  • ​如何使用ArcGIS Pro制作一张地形图
  • 1.初识MySQL
  • Leetcode链表问题汇总
  • AI口语APP的实现