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

栈 数据结构(java技术栈有哪些)

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

栈 数据结构(java技术栈有哪些)

前言:

         嘻嘻,今天博主终于要更新栈的知识了,上次结束说要更新要是上一次,所以这次咱就把栈的实现的更新带来了,嗯~ o(* ̄▽ ̄*)o小伙伴可能会问,栈能干什么啊,在Java中栈不是有对应的类吗....

         栈能够实现逆波兰计算机,中缀表达式转后缀表达式,还有普通中缀计算机等.....

         话不多说,我们就从一下几个方面开始吧

        栈的概念  栈的实现思路  栈的代码实现与分析  结论 

        如果喜欢作者的话,戳这

        往期精彩:
        普通队列与环形队列


栈的概念: 
     栈是一个先进后出,后进先出的有序列表 在栈中添加元素和删除元素都在一端执行,是一个特殊的线性表 插入元素或删除元素的一端是活跃的一端,被称为栈顶 另一端不活跃,被称为栈底 常用术语:压栈=入栈=push 出栈=弹栈=pop

 栈的实现思路:

 我们需要创建一个数组去模拟栈 定义一个栈顶变量top,用于指向栈顶 定义压栈弹栈等方法


 栈的代码实现与分析:

创建一个数组及其变量模拟栈 

    private int maxSize;
    private int top;
    private Object[] stack;

    public ArraysStack(int maxSize) {
        this.maxSize = maxSize;
        this.top = -1;
        stack = new Object[maxSize];
    }

 代码分析:

 maxSize是栈的最大容量,在调用构造方法的时候可以自行指定 top用于指向栈顶的变量,应该被初始化为-1 这里选用了Object[]数组,目的是什么都可以放进去

图解: 

 

 创造两个方法,分别判断是否已满或已空

public boolean isFull() {
        return top == maxSize - 1;
    }
public boolean isEmpty() {
        return top == -1;
    }

 代码分析: 

图解: 

 创建一个压栈和弹栈的方法

public void push(E element) {
        if(isFull()) {
            System.out.println("栈已满,无法压栈");
            return;
        }
        stack[++top] = element;
    }
public E pop() throws Exception{
        if(isEmpty()) {
            throw new Exception("栈已空,无法弹栈");
        }
        return (E)stack[top--];
    }

  代码分析: 

加入元素和取出元素之前,要分别分析一下栈是否为空,或是否为满,要有校验意识因为top初始化为-1,所以添加元素的时候应该先要自增,再添加因为top指向栈顶元素,所以取出元素时,先取出,栈顶top变量再自减 

 图解: 

 

 创建一个遍历的方法

public void print() {
        if(isEmpty()){
            System.out.println("栈已空,无法输出");
            return;
        }
        for (int i = top; i >= 0; i--) {
            System.out.println("stack[" + i + "] = " + stack[i]);
        }
    }

   代码分析: 

    从栈的定义得知,先拿出来的是栈顶元素,所以应该从top开始,到0结束  
 完整代码:
package datastructure.chapter02.stack.instance;


public class ArraysStack {
    private int maxSize;
    private int top;
    private Object[] stack;

    
    public ArraysStack(int maxSize) {
        this.maxSize = maxSize;
        this.top = -1;
        stack = new Object[maxSize];
    }

    
    public boolean isFull() {
        return top == maxSize - 1;
    }

    
    public boolean isEmpty() {
        return top == -1;
    }

    
    public void push(E element) {
        if(isFull()) {
            System.out.println("栈已满,无法压栈");
            return;
        }
        stack[++top] = element;
    }

    
    public E pop() throws Exception{
        if(isEmpty()) {
            throw new Exception("栈已空,无法弹栈");
        }
        return (E)stack[top--];
    }

    
    public void print() {
        if(isEmpty()){
            System.out.println("栈已空,无法输出");
            return;
        }
        for (int i = top; i >= 0; i--) {
            System.out.println("stack[" + i + "] = " + stack[i]);
        }
    }
}
 结论:

        栈的知识点简单又重要,代码不多,理解起来也不难,我来总结一下重要的几点:

        栈顶top的初始化赋值

        栈的压栈和弹栈的方法

        下一站:双向链表!!!

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

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

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