栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现栈

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现栈

这里写目录标题

栈的概念

什么是栈

举个栗子 栈在应用中的作用具体实现

栈接口栈具体实现栈测试

栈的概念 什么是栈

是一个先进后出(First In Last out)的数据结构,出栈(从栈中取出元素)入栈(往栈中存入元素)只能在栈顶进行。

举个栗子

看了上述的表述是不是云里雾里的,没事我举个例子你就明白了。大家都打过羽毛球吧,装羽毛球的圆筒就能看作是一个栈,它首尾由一个开口封闭的底部组成。

我们打完羽毛球,将羽毛球收进筒的时候,只能从开口处放入羽毛球,取羽毛球的时候,也只能从开口处去拿的羽毛球。而且我们很容易发现先放进去的羽毛球往往是最后取出来的

在栈中这样取羽毛球的操作,我们称之为出栈放进去羽毛球的操作,我们称之为入栈。而“开口处”,我们称之为栈顶,因为出栈入栈的操作都在这里进行,与之相对的“封闭的底部”,无法从底部取出或者放入元素,我们称之为栈底

栈在应用中的作用

比如在JVM中的Java虚拟中的栈帧,又或者是Java中的语法检查,以及编译器中的语法分析器等等。

具体实现 栈接口
public interface IStack {
    //置空
    public void clear();
    //判空
    public boolean isEmpty();
    //返回栈中元素个数
    public int length();
    //读取栈顶元素
    public Object peek();
    //入栈
    public void push(Object o) throws Exception;
    //返回栈顶元素 出栈
    public Object pop();
}
栈具体实现

public class SqStack implements IStack{
    //对象数组实现栈
    public Object[] stackElem;
    //指向下一存储位置 为0时表示为空
    public int top = 0;

    public SqStack(int maxSize) {
        stackElem = new Object[maxSize];
    }


    @Override
    public void clear() {
        top = 0;
    }

    @Override
    public boolean isEmpty() {
        return top == 0;
    }

    @Override
    public int length() {
        //top指向下一存储位置 即指向的是当前  下标+1 = 当前表长
        return top;
    }

    //读取栈顶元素
    @Override
    public Object peek() {
        if(top != 0)
            return stackElem[top - 1];
        else
            return null;
    }

    //入栈
    @Override
    public void push(Object o) throws Exception {
        if(top == stackElem.length)
            throw new Exception("栈已满。");
        else
            stackElem[top++] = o;
    }

    //出栈
    @Override
    public Object pop() {
        if(isEmpty())
            return null;
        else {
            top = top - 1;
            return stackElem[top];
        }

    }
}

栈测试

public class StackTest {
    public static void main(String[] args) throws Exception {
        SqStack sqStack = new SqStack(5);
        sqStack.push("零");
        sqStack.push("一");
        sqStack.push("二");
        sqStack.push("三");

        System.out.println("==========================");
        System.out.println("peek()测试,返回栈顶元素");
        System.out.println("栈顶元素为: " + sqStack.peek());

        System.out.println("==========================");
        System.out.println("出栈测试,返回栈顶元素");
        System.out.println("pop()出栈元素为: " + sqStack.pop() + " 出栈后栈顶元素为:" + sqStack.peek());

        System.out.println("==========================");
        System.out.println("入栈测试,返回栈顶元素");
        sqStack.push("三");
        System.out.println("入栈后栈顶元素为: " + sqStack.peek());

        System.out.println("==========================");
        System.out.println("length()测试,返回栈顶元素");
        System.out.println("当前栈长度为: " + sqStack.length());

        System.out.println("==========================");
        System.out.println("栈满测试,存入元素四。");
        sqStack.push("四");
        System.out.println("当前栈顶元素为: " + sqStack.peek() + " 栈的长度为: " + sqStack.length());
        System.out.println("尝试往已满栈中放入元素。");
        try {
            sqStack.push("五");
        }
        catch (Exception e){
            System.out.println(e.toString());
        }

        System.out.println("==========================");
        System.out.println("判空测试");
        if(!sqStack.isEmpty()) {
            System.out.println("栈不为空。栈顶元素为:" + sqStack.peek());
        }
        System.out.println("置空测试.");
        sqStack.clear();
        if(sqStack.isEmpty()) {
            System.out.println("栈为空。栈顶元素为:" + sqStack.peek());
            System.out.println("入栈元素wu." );
            sqStack.push("wu");
            System.out.println("栈顶元素为:" + sqStack.peek());
        }

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号