详解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微信消息接口配置详解

    SpringBoot微信消息接口配置详解

    这篇文章主要介绍了SpringBoot 微信消息接口配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • 详解Maven POM(项目对象模型)

    详解Maven POM(项目对象模型)

    这篇文章主要介绍了Maven POM(项目对象模型)的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java集合之Map接口的实现类精解

    Java集合之Map接口的实现类精解

    Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value;Map中的键值对以Entry类型的对象实例形式存在;键(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值
    2021-09-09
  • Java数据库连接池之DBCP浅析_动力节点Java学院整理

    Java数据库连接池之DBCP浅析_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java数据库连接池之DBCP的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Java对象简单实用案例之计算器实现代码

    Java对象简单实用案例之计算器实现代码

    这篇文章主要为大家详细介绍了Java对象简单实用案例之计算器实现代码
    2016-11-11
  • Java class文件格式之属性_动力节点Java学院整理

    Java class文件格式之属性_动力节点Java学院整理

    在本文中, 主要讲解了class文件中的一些属性。 这些属性可以出现在class文件中的对个地方, 用来描述一些其他信息
    2017-06-06
  • 解析MyBatis源码实现自定义持久层框架

    解析MyBatis源码实现自定义持久层框架

    这篇文章主要介绍了手撕MyBatis源码实现自定义持久层框架,涉及到的设计模式有Builder构建者模式、⼯⼚模式、代理模式,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • SpringBoot实现服务接入nacos注册中心流程详解

    SpringBoot实现服务接入nacos注册中心流程详解

    这篇文章主要介绍了SpringBoot实现服务接入nacos注册中心流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Java中的Redis是什么意思

    Java中的Redis是什么意思

    Redis是一个非常强大的工具,它可以用来实现很多有趣的应用,还可以使用Redis来实现分布式锁,这样你就可以在多线程或多进程的环境下同步代码,这篇文章主要介绍了Java中的Redis是什么意思,需要的朋友可以参考下
    2023-08-08
  • MyBatis saveBatch 性能调优的实现

    MyBatis saveBatch 性能调优的实现

    本文主要介绍了MyBatis saveBatch 性能调优的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论