java基础-栈

简介: java基础-栈

正文


小伙伴们,你们好呀!我是老寇!


栈是一种特殊的线性表,并且只能一端进行插入和删除操作


本文采用链表来创建栈


1.创建一个节点的类


package cn.itcast.com.istack;
public class Node {
  public Object data;
  public Node next;
  public  Node(Object data) {
    this(data,null);
  }
  public Node() {
    this(null,null);
  }
  public Node(Object data,Node next) {
    this.data=data;
    this.next=next;
  }
}


2.创建接口


package cn.itcast.com.istack;
public interface IStack {
  public void clear();//将栈置空
  public boolean isEmpty();//判断为空
  public void push(Object x);//压入栈
  public Object pop();//移出栈顶
  public Object peek();//查看栈顶
  public void display();//打印
  public int length();//长度
}


3.实现接口


package cn.itcast.com.istack;
/***
 * 尾插法
 * 
 **/
public class LinkStack implements IStack{
  public Node top;
  @Override
  public void clear() {
    top=null;
  }
  @Override
  public boolean isEmpty() {
        return top==null;   
  }
  @Override
  public void push(Object x) {  
    Node p=new Node(x);
    p.next=top;
    top=p;
  }
  @Override
  public Object pop() {
    if(!isEmpty()) {
      Node p=top;
      top=top.next;
      return p.data;
    }else {
      return null;
    }
  }
  @Override
  public Object peek() {
     if(!isEmpty()) {
       return top.data;
     }else {
       return null;
     }
  }
  @Override
  public void display() {
    Node p=top;
    while(p!=null) {
      System.out.print(p.data.toString()+" ");
      p=p.next;
    }
    System.out.println();
  }
  @Override
  public int length() {
    Node p=top;
    int length=0;
    while(p!=null) {
      length++;
      p=p.next;
    }
    return length;
  }
  public static void main(String[] args) {
    System.out.println("栈中各元素为(栈顶到栈底):");
    LinkStack S=new LinkStack();
    for(int i=1;i<=10;i++) {
      S.push(i);
    }
    S.display();
    if(!S.isEmpty()) {
      System.out.println("栈非空!");
    }
    System.out.println("栈的长度为:" +S.length());
    System.out.println("栈顶元素为:"+S.peek());
    System.out.println("去除栈顶元素后,栈中各元素为(栈顶到栈底):");
    S.pop();
    S.display();
    System.out.println("去除栈中剩余的所有元素! 进行中。。。");
    S.clear();
    if(S.isEmpty()) {
      System.out.println("栈为空!");
    }
  }
}


4.运行结果


222.png

目录
相关文章
|
30天前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
107 4
|
2月前
|
存储 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
51 0
|
14天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
1月前
|
Java 索引
java中的栈(利用数组实现栈)
这篇文章通过Java代码示例介绍了如何使用数组实现栈操作,包括栈的初始化、入栈、出栈、判断栈满和空以及遍历栈的方法。
java中的栈(利用数组实现栈)
|
2月前
|
Java 运维
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
49 2
|
2月前
|
存储 安全 Java
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
56 3
|
2月前
|
存储 缓存 监控
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
43 3
|
2月前
|
存储 Java
深入理解Java中的堆内存与栈内存分配
深入理解Java中的堆内存与栈内存分配
|
2月前
|
存储 Java 对象存储
Java虚拟机(JVM)中的栈(Stack)和堆(Heap)
在Java虚拟机(JVM)中,栈(Stack)和堆(Heap)是存储数据的两个关键区域。它们在内存管理中扮演着非常重要的角色,但各自的用途和特点有所不同。
42 0
|
2月前
|
存储 Java
Java堆与栈的区别及应用
Java堆与栈的区别及应用