30分钟掌握-算法(用链表实现栈)演示

Posted 栗子~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了30分钟掌握-算法(用链表实现栈)演示相关的知识,希望对你有一定的参考价值。

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


30分钟掌握-算法(用链表实现栈)演示

01 什么是栈?

栈就像一个窄桶,先进入的数据只能最后被取出来(LIFO),即先进后出,后进先出。


02 栈的结构图

在这里插入图片描述


03 实战

废话不多说,放我的练习demo源码,运行走起来(只供参考哈,上面注释写的蛮全的):

package com.yzy.demo.javatest.link;
/**
 * 有头结点链表实现
 * @author yangzhenyu
 * */
public class LNode<T> {
    public T data;
    public LNode<T> next;
}

package com.yzy.demo.javatest.stack;

import com.yzy.demo.javatest.link.LNode;
/**
 * 栈的实现,先进后出、后进先出,
 * */
public class MyStack<T> {
    //头部结点
    private LNode<T> head;
    public MyStack(){
        //头部结点初始化
        head = new LNode<>();
        head.data = null;
        head.next = null;
    }
    /**
     * 判断栈是否为空
     * */
    public boolean empty(){
        return head.next == null;
    }
    /**
     * 查看栈中的元素数量
     * */
    public int size(){
        int i = 0;
        LNode<T> p = head.next;
        while (p != null){
            p  = p.next;
            i++;
        }
        return i;
    }
    /**
     * 入栈 链表新增
     * */
    public void push(T t){
        LNode<T> p = new LNode();
        p.data = t;
        p.next = head.next;
        head.next = p;
    }
    /**
     * 出栈, 链表删除头部结点+1位置结点
     * 链表删除原理:前驱结点.next = 后继结点
     * */
    public T pop(){
        LNode<T> p = head.next;
        if (p!=null){
            head.next = p.next;
            System.out.println("出栈:"+p.data);
            return p.data;
        }
        System.out.println("栈已经空了");
        return null;
    }

    /**
     * 不出栈,取得栈顶元素
     * */
    public T top(){
        if (head.next!= null){
            return head.next.data;
        }
        System.out.println("栈已经空了");
        return null;
    }

    /**
     * 测试
     * */
    public static void main(String[] args) {
        MyStack<Integer> myStack = new MyStack<>();
        boolean flag = true;
        //入栈
        System.out.println("开始入栈==============>>>>");
        for (int i=0;i<=5;i++){
            //奇数入栈
            if (i%2!=0){
                System.out.println("入栈:"+i);
                myStack.push(i);
            }
        }
        //获取栈内总数
        System.out.println("获取栈内总数:"+ myStack.size());
        //判断栈是否为空
        System.out.println("判断栈是否为空:"+ myStack.empty());
        //查询栈顶数据
        System.out.println("查询栈顶数据:"+myStack.top());
        //出栈
        while (flag){
            boolean index = myStack.pop() == null?true:false;
            if (index){
                flag = false;
            }
        }
        //获取栈内总数
        System.out.println("获取栈内总数:"+ myStack.size());
        //判断栈是否为空
        System.out.println("判断栈是否为空:"+ myStack.empty());
    }
}

运行:

在这里插入图片描述

以上是关于30分钟掌握-算法(用链表实现栈)演示的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法--必知必会

用链表实现栈demo

Java数据结构——用链表实现栈

数据结构和算法学编程必知必会的50个代码实现,你都会了吗?

对栈的操作和算法实现

《Java数据结构与算法》笔记-CH5-链表-4用链表实现堆栈