首页 > 编程语言 >Java栈

Java栈

时间:2023-02-22 01:55:06浏览次数:35  
标签:Node 结点 Java head element next public

栈性质

  • 栈(也叫堆栈,Stack)是一种特殊的线性表,它只能在在表尾进行插入和删除操作,就像下面这样:

image

  • 只能在一端进行插入和删除,当我们依次插入1、2、3、4这四个元素后,连续进行四次删除操作,删除的顺序刚好相反:4、3、2、1,我们一般将其竖着看:
    image

  • 底部称为栈底,顶部称为栈顶,所有的操作只能在栈顶进行,也就是说,被压在下方的元素,只能等待其上方的元素出栈之后才能取出,就像我们往箱子里里面放的书一样,因为只有一个口取出里面的物品,所以被压在下面的书只能等上面的书被拿出来之后才能取出,这就是栈的思想,它是一种先进后出的数据结构(FILO,First In, Last Out)

实现栈也是非常简单的,可以基于我们前面的顺序表或是链表,这里我们需要实现两个新的操作:

  • pop:出栈操作,从栈顶取出一个元素。
  • push:入栈操作,向栈中压入一个新的元素。

栈可以使用顺序表实现,也可以使用链表实现,这里我们就使用链表,实际上使用链表会更加的方便,我们可以直接将头结点指向栈顶结点,而栈顶结点连接后续的栈内结点:


栈的属性

  • private final Node<E> head = new Node<>(null); 大体内容跟链表类似

  • 以下代码利用链表方式来表示栈

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

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

栈的插入

  • 插入思路

image

  • 插入代码

    • Node<E> node = new Node<>(element);新创建一个节点
public void push(E element) {
    Node<E> node = new Node<>(element);   //直接创建新结点
    node.next = head.next;    //新结点的下一个变成原本的栈顶结点
    head.next = node;     //头结点的下一个改成新的结点
}

栈的推出

  • 推出思路和插入相反

  • 推出代码

public E pop() {
    if (head.next == null)   //如果栈已经没有元素了,那么肯定是没办法取的
        throw new NoSuchElementException("栈已经为空");
    E e = head.next.element;   //先把待出栈顶元素取出来
    head.next = head.next.next;   //直接让头结点的下一个指向下一个的下一个
    return e;
}



总代码

  • Main代码

import ClassStudy.LinkStack;

public class Main {
    public static void main(String[] args) {
        LinkStack<String> stack = new LinkStack<>();
        stack.push("AA");
        stack.push("BBB");
        stack.push("CCeC");
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
    }
}

  • LinkStack类

package ClassStudy;

import java.util.NoSuchElementException;

public class LinkStack<E> {

    private final Node<E> head = new Node<>(null);   //大体内容跟链表类似

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

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

    //推入操作
    public void push(E element) {
        Node<E> node = new Node<>(element);   //直接创建新结点
        node.next = head.next;    //新结点的下一个变成原本的栈顶结点
        head.next = node;     //头结点的下一个改成新的结点
    }

    //推出操作
    public E pop() {
        if (head.next == null)   //如果栈已经没有元素了,那么肯定是没办法取的
            throw new NoSuchElementException("栈已经为空");
        E e = head.next.element;   //先把待出栈顶元素取出来
        head.next = head.next.next;   //直接让头结点的下一个指向下一个的下一个
        return e;
    }
}

标签:Node,结点,Java,head,element,next,public
From: https://www.cnblogs.com/WoOD-outPut/p/17143049.html

相关文章

  • JavaScript 数组遍历的五种方法(转)
    转自:JavaScript数组遍历的五种方法这篇文章主要介绍了JavaScript数组遍历的五种方法,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下在使用JavaScri......
  • Java链表
    链表顺序表性质链表不同于顺序表,顺序表底层采用数组作为存储容器,需要分配一块连续且完整的内存空间进行使用,而链表则不需要,它通过一个指针来连接各个分散的结点,形成了......
  • IDEA+java swing+MySQL配置
    1、建立一个java项目(不是空项目)2、创建GUIForm(减少代码压力)生成代码出现了这个窗体此时说明swing已经可用了3、连接MySQL......
  • 在PHP和JavaScript中设置Cookie、会话存储(SessionStorage)和本地存储(LocalStorage)
    A.Cookie介绍Cookie:Cookie常用于识别用户,它是服务器留在用户计算机中的小文件(大小限制在4KB),每当相同的计算机通过浏览器请求页面时,它会同时发送Cookie,即Cookie是随HTTP......
  • Solon v2.1.4 发布。支持 java、kotlin、groovy!
    本次发布,重点测试和验证了在java、kotlin、groovy三种jvm语言里,开箱即用的特性。并发布SolonInitializr:https://solon.noear.org/start/(也即将发布idea插件)最......
  • JavaScript相关操作
    JQUERY--HTML标签属性操作$('#id').attr('attr_name','attr_value');//设置单一属性值$('#id').attr({'attr_name1':'attr_value1','attr_name2':'attr_value2'});//......
  • Java Web(八)JSP
    JSP一.入门1.概念JavaServerPages,Java服务端页面一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容JSP=HTML+Java2.快速入门导入......
  • java代码的运行
    1. 运行流程    编译后的class文件加载到虚拟机中,加载后的Java类会被存放于方法区,运行时执行方法区内的代码。               ......
  • Java代码工具之中英文语句分词
    在自然语言处理中比较热门的操作就是中文或英文语句分词了,分词就是按照不同的算法和参数将语句分成若干词汇。拆分后的关键词可以进行词频统计或者词云图片生成等,能够快速方......
  • javaweb-filter实现登录拦击功能
    javaweb-filter实现登录拦击功能要求:用户登录了之后才能进入主页,注销的之后就不能进入主页;(在过滤器中实现!)1、用户登录页面实现前端页面代码<%@pagecontentType="text......