美文网首页Java 杂谈数据结构与算法
数据结构(2):栈的原理和实现

数据结构(2):栈的原理和实现

作者: 要成为王的男人 | 来源:发表于2019-08-10 18:56 被阅读8次

一、介绍

栈是一种数据先入后出,后入先出的数据结构。

栈示意图

如果图所示,将数字 10、15、6、9 存入栈后,从栈中取到的数据按顺序将会是 9、6、15、10。栈的结构像我们生活中的箱子,最先放入的物品将会在箱子的最底部,最后放入的数据在最上面,拿物品时也需要从最上面拿起。

二、代码实现

1、创建 MyStack 类作为自定义的栈

public class MyStack {

}

2、声明所需的属性

底层使用数组存储数据,也可以使用java的泛型替代Object类型。

private Object[] arr;//存储数据
private int top;//栈顶的位置

栈顶:整个栈最上面(最后入栈)的元素,也就是数组中最后存入的元素。

栈底:整个栈最下面(最先入栈)的元素,也就是数组中最先存入的元素。

3、栈的构造方法

public MyStack(){
    arr = new Object[10];
    top = -1;
}

/**
 * 参数为数组的初始长度
 * @param maxSize
 */
public MyStack(int maxSize){
    arr = new Object[maxSize];
    top = -1;
}

4、向栈中压入数据

底层的操作就是向数组中存入数据,由于top变量记栈顶的位置,所以top的值增加1后即为最新的栈顶的置。

 public void push(Object value) {
    arr[++top] = value;
}

5、弹出栈顶的数据

取得栈顶的数据,并将此数据将栈中移除。向栈中压入数据需要将记录栈顶的位置的变量top加1,同理,移除栈顶数据需要将top减1。

public Object pop(){
    return arr[top--];
}

6、查看栈顶数据

public Object peek(){
    return arr[top];
}

7、判断是否为空

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

8、判断是否存满

top的值等于数组最后一个元素的位置即为存满

public boolean isFull(){
    return top == arr.length-1;
}

9、完整代码

public class MyStack {
    private Object[] arr;//存储数据
    private int top;//栈顶的位置

    public MyStack() {
        arr = new Object[10];
        top = -1;
    }

    /**
     * 参数为数组的初始长度
     *
     * @param maxSize
     */
    public MyStack(int maxSize) {
        arr = new Object[maxSize];
        top = -1;
    }

    public void push(Object value) {
        arr[++top] = value;
    }

    /**
     * 弹出栈顶的数据
     * @return
     */
    public Object pop(){
        return arr[top--];
    }

    public Object peek(){
        return arr[top];
    }

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

    public boolean isFull(){
        return top == arr.length-1;
    }
}

三、验证

public static void main(String[] args) {
    MyStack stack = new MyStack(4);
    stack.push("a");
    stack.push("b");
    stack.push("c");
    stack.push("d");

    System.out.println("是否为空:" + stack.isEmpty());
    System.out.println("是否存满:" + stack.isFull());

    System.out.println("栈顶:"+stack.peek());
    System.out.println("栈顶:"+stack.peek());

    //弹出栈中所有数据
    while (!stack.isEmpty()){
        System.out.println(stack.pop());
    }

    System.out.println("是否为空:" + stack.isEmpty());
    System.out.println("是否存满:" + stack.isFull());
}

相关文章

  • Android面试题总结(题目+复习链接)

    数据结构 1.栈实现原理 java数据结构与算法之栈(Stack)设计与实现 - CSDN博客 2.链表实现原理 ...

  • 数据结构(2):栈的原理和实现

    一、介绍 栈是一种数据先入后出,后入先出的数据结构。 如果图所示,将数字 10、15、6、9 存入栈后,从栈中取到...

  • 栈的数据结构 栈数据结构方面特点是数据具有先进后出的特点,下面是用数组简单实现了栈的基本方法 概念 运行原理 问题...

  • 004 go语言实现栈

    1 数据结构 数据结构: 要实现的功能:0 栈的初始化1 获取栈长度2 入栈3 出栈4 清空栈内容5 判断栈是否为...

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

  • 数据结构之栈 原理 栈是一种比较常见的数据结构,它的操作可以看做是数组的子集,因为栈只能从栈顶取元素和添加元素,并...

  • 栈和队列

    目录 1、引言2、栈3、队列 引言 栈和队列都是动态集合,可以理解为线性表或线性表实现的数据结构。它可以由数组实现...

  • 栈的两种实现

    实现方式 这里介绍两种实现方式:顺序栈和链栈。 栈的特点 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的...

  • 小米-基础算法-手写栈结构

    实现一个栈,可以使用除了栈之外的数据结构eg:输入:push(1)pop()push(2)top() // re...

  • AutoreleasePool 的相关问题

    (1)Autoreleasepool的实现原理: 以栈为结点,由双向链表的形式合成的数据结构。 与线程一一对应。 ...

网友评论

    本文标题:数据结构(2):栈的原理和实现

    本文链接:https://www.haomeiwen.com/subject/nyxdjctx.html