栈-Java实现

简介:

栈,先进后出


push

 public void push(E data){
   
       //链表实现不需要考虑溢出
       Node<E> node = new Node<>(data);
       node.next = head.next;
       head.next = node;
   }


pop

 public E pop(){
   
       if (isEmpty()){
   
           throw new RuntimeException("栈空");
       }
       Node<E> node = head.next;
       head.next = node.next;
       return node.data;
   }


isEmpty

 public boolean isEmpty(){
   
      return head.next == null;
  }


总览

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/29 22:37
 */

public class LinkStack<E> {
   
   private final Node<E> head = new Node<>(null);

   public void push(E data){
   
       //链表实现不需要考虑溢出
       Node<E> node = new Node<>(data);
       node.next = head.next;
       head.next = node;
   }

   public E pop(){
   
       if (isEmpty()){
   
           throw new RuntimeException("栈空");
       }
       Node<E> node = head.next;
       head.next = node.next;
       return node.data;
   }

  public boolean isEmpty(){
   
      return head.next == null;
  }

   private static class Node<E> {
   
       private E data;
       private Node<E> next;

       public Node(E data) {
   
           this.data = data;
       }
   }
}


测试

package com.collection;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/29 21:42
 */

public class Main {
   
    public static void main(String[] args) {
   
        LinkStack<String> stack = new LinkStack<>();
        stack.push("a");
        stack.push("b");
        stack.push("c");
        stack.push("d");
        while (!stack.isEmpty()) {
   
            System.out.println(stack.pop());
        }

    }
}
目录
相关文章
|
4月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
144 4
|
1月前
|
存储 算法 Java
🧠Java零基础 - Java栈(Stack)详解
【10月更文挑战第17天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
25 2
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
32 2
|
4月前
|
Java 索引
java中的栈(利用数组实现栈)
这篇文章通过Java代码示例介绍了如何使用数组实现栈操作,包括栈的初始化、入栈、出栈、判断栈满和空以及遍历栈的方法。
java中的栈(利用数组实现栈)
|
5月前
|
Java 运维
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
68 2
|
5月前
|
存储 安全 Java
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
90 3
|
5月前
|
存储 缓存 监控
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
49 3
|
5月前
|
存储 Java 对象存储
Java虚拟机(JVM)中的栈(Stack)和堆(Heap)
在Java虚拟机(JVM)中,栈(Stack)和堆(Heap)是存储数据的两个关键区域。它们在内存管理中扮演着非常重要的角色,但各自的用途和特点有所不同。
56 0
|
5月前
|
存储 Java
JAVA程序运行问题之JVM 中的栈如何解决
JAVA程序运行问题之JVM 中的栈如何解决
|
5月前
|
存储 安全 Java
Java集合篇之逐渐被遗忘的Stack,手写一个栈你会吗?
总之,虽然在日常开发中,`java.util.Stack`正逐渐被其他类如 `Deque`接口的实现所取代,但手写一个栈(无论是基于数组还是链表)都是一次很好的编程练习,它可以帮助开发者更加深入地理解栈这种数据结构的工作原理和各种操作。
39 0