详解Java中LinkedStack链栈的实现

 更新时间:2022年11月14日 17:06:17   作者:第一天  
这篇文章主要为大家详细介绍了Java中LinkedStack链栈的相关知识,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下

概念

:又称为堆栈.是限制在表的一端进行插入和删除的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。

表中进行插入、删除操作的一端称为栈顶.栈顶保存的元素秘为栈项元素。想对的,表的另一端称为栈底。当栈中没有数据元素时,称为空栈;向一个栈中插入元素又称为进栈或入栈;从一个栈中删除元素又称为出栈或退栈。

由于栈的插入和删除操作都仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为后进先出表。

链栈--用链式存储结构实现的栈称为链栈;其结构特点与单链表的结构相同,链式堆栈也是由一个个结点组成的,每个结点由两个域组成,一个是存放数据元素的数据元素域,另一个是存放指向向下一个节点的对象的引用域;因为栈中主要是在栈顶进行操作,所以在链表的头部做栈顶是最方便的,而且不用添加头结点。

具体内容的解释都写在注释里了

StackLnterface接口类

public interface StackLnterface0<T> {
    public interface StackInterface<T> {
        //在接口处声明方法,在类内进行实现T
        public void push(T element);//用于表达进栈的方法
        public  T pop();//用于表达出栈的方法
        public boolean isEmpty();//用于判断栈是否为空的方法的方法
    }
}

LinkedStack接口实现

class LinkedNode<T>{
    private T data;//声明data
    private LinkedNode<T> next;//声明next
    public LinkedNode(T i){//定义有参构造函数
        data = i;
        next = null;
    }
    public LinkedNode(){//定义无参构造函数
        data = null;
        next = null;
    }
    //data和next 的getter and setter
    public T getData(){
        return data;
    }
    public void setData(T element){
        data = element;
    }
    public LinkedNode<T>getNext(){
        return next;
    }
    public void setNext(LinkedNode<T>successor){
        next = successor;
    }
}

public class LinkedStack<T>  implements StackLnterface0<T> {    //通过重新实现多个接口
    protected LinkedNode<T> top;//声明top指针

    public LinkedStack() {
        //栈的初始化,初始化一个空栈
        LinkedNode<T> first = new LinkedNode<T>();//定义一个空节点
        top = first;//把空节点放在最开头
    }

    public void push(T element) {//用于表达进栈的方法
        LinkedNode<T> s = new LinkedNode<T>(element);//用s来代表要输入的元素
        s.setNext(top);//让新进入的元素指向它的上一位元素
        top = s;//top指针指到s上面
    }

    public T pop() {//用于表达出栈的方法
        if (isEmpty())//先判断是否空栈,如果是空栈就抛出异常
            throw new RuntimeException("栈空");
        T top_node = top.getData();//定义一个记录top指针指向元素的变量
        top = top.getNext();//出栈后top指针指向下一个要出栈位置的元素
        return top_node;//返回出栈时读取的元素
    }

    public boolean isEmpty() {//用于判断栈是否为空的方法的方法
        if (top == null)//如果top指针指向null的话
            return true;//说明栈空
        else
            return false;//否则就是栈非空
    }

    public T getTop(){//用于表达展示当前的指针指向元素的方法
        if(isEmpty())//先判断是否空栈,如果是空栈就抛出异常
            throw new RuntimeException("栈空");
        T top_node = top.getData();//定义一个记录top指针指向元素的变量
        return top_node;//返回top指向的元素
    }

    public void getLz() {//用于展示当前链栈的方法
        LinkedNode<T> a = top;//定义此时的a代替top指针
        while (a.getNext()!=null){//当a的引用域不为null时
            System.out.print(a.getData()+"\n");//输出此时a的数据域
            a = a.getNext();//往下循环a让元素一个一个轮流展示
        }
    }
}
 class ShiJian1{//实践类
    public static void main(String[] args){
       LinkedStack<Integer> linked = new LinkedStack<Integer>();//实现T范型为int类型
        //输入要加入链栈的元素
       linked.push(6);
       linked.push(7);
       linked.push(8);
       linked.push(9);
       linked.getLz();
       //进行出栈操作
       System.out.println("进行一次出栈操作,得到元素"+linked.pop());
       System.out.println("再进行一次出栈操作,得到元素"+linked.pop());
       linked.getLz();
       System.out.println("此时的top指针指向元素为"+linked.getTop());

    }
}

运行结果

到此这篇关于详解Java中LinkedStack链栈的实现的文章就介绍到这了,更多相关Java LinkedStack链栈内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot替换默认的tomcat服务器的方法

    SpringBoot替换默认的tomcat服务器的方法

    Tomcat是Apache基金下的一个轻量级的Servlet容器,支持Servlet和JSP,Tomcat具有Web服务器特有的功能,在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,本文给大家介绍了Spring Boot如何替换默认的tomcat服务器,需要的朋友可以参考下
    2024-08-08
  • springboot整合mybatis流程详解

    springboot整合mybatis流程详解

    这篇文章主要为大家详细介绍了springboot整合mybatisplus的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-05-05
  • 详解在Java的Struts2框架中配置Action的方法

    详解在Java的Struts2框架中配置Action的方法

    这篇文章主要介绍了详解在Java的Struts2框架中配置Action的方法,讲解了包括struts.xml中的action配置及基于注解方式Action配置的两个方式,需要的朋友可以参考下
    2016-03-03
  • 一道关于java异常处理的题目

    一道关于java异常处理的题目

    本文给大家分享一道关于java异常处理的题目,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • SpringBoot中Filter没有生效原因及解决方案

    SpringBoot中Filter没有生效原因及解决方案

    Servlet 三大组件 Servlet、Filter、Listener 在传统项目中需要在 web.xml 中进行相应的配置,这篇文章主要介绍了SpringBoot中Filter没有生效原因及解决方案,需要的朋友可以参考下
    2024-04-04
  • SpringMVC如何域对象共享数据

    SpringMVC如何域对象共享数据

    在Spring MVC中,可以使用域对象来共享数据,域对象是一个Map类型的对象,可以在请求处理方法之间共享数据,本文给大家介绍SpringMVC 域对象共享数据的示例代码,一起看看吧
    2023-09-09
  • Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 代码实践

    Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 代码实践

    这篇文章主要介绍了Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java substring方法实现原理解析

    Java substring方法实现原理解析

    这篇文章主要介绍了Java substring方法实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 使用java实现各种数据统计图(柱形图,饼图,折线图)

    使用java实现各种数据统计图(柱形图,饼图,折线图)

    用Jfree实现条形柱状图表,java代码实现。可经常用于报表的制作,代码自动生成后可以自由查看。可以自由配置图表的各个属性,用来达到自己的要求和目的。本文给大家介绍使用java实现各种数据统计图(柱形图,饼图,折线图),需要的朋友可以参考下
    2015-10-10
  • SpringSecurity整合jwt权限认证的全流程讲解

    SpringSecurity整合jwt权限认证的全流程讲解

    这篇文章主要介绍了SpringSecurity整合jwt权限认证的全流程讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论