栈和队列

Posted hup666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈和队列相关的知识,希望对你有一定的参考价值。

相关概念

  • 栈是一种特殊的线性表
  • 只允许在固定的一端进行插入和删除元素操作。
  • 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。
  • 原则:后进先出LIFO(Last In First Out)
  • 压栈:栈的插入操作,入数据在栈顶
  • 出栈:栈的删除操作,出数据也在栈顶

技术图片

 

 我们来实现自己的栈,首先用数组来实现

package com.differ.jackyun.examples.javabasisc.datastructure;
import org.junit.Test;
import java.util.Arrays;
/**
 * 实现自己的栈
 *
 * @author hup
 * @data 2020-06-14 8:54
 **/
public class MyStackWithArr<E> {
    /**
     * 数组
     */
    public Object[] arrStack;
    /**
     * 数组内元素数量
     */
    public int count;

    public MyStackWithArr() {
        arrStack = new Object[10];
    }


    /**
     * 入栈
     *
     * @param item
     */
    public void push(E item) {
        //判断空间大小情况和扩容
        this.relize(count + 1);
        //元素放入数组
        arrStack[count] = item;
        count++;
    }

    /**
     * 判数组长度是否够用,自动扩容
     *
     * @param maxCount 需要存储的总量
     */
    private void relize(int maxCount) {
        if (maxCount <= this.count) {
            return;
        }
        //扩容  10
        arrStack = Arrays.copyOf(arrStack, 10);
    }

    /**
     * 出栈
     *
     * @return
     */
    public E pop() {
        E item = (E) arrStack[count - 1];
        arrStack[count - 1] = null;
        count--;
        return item;
    }

    /**
     * 取栈顶数据
     *
     * @return
     */
    public E peek() {
        E item = (E) arrStack[count - 1];
        return item;
    }
}

 

然后我们测试下好不好用

    @Test
    public void test() {
        MyStackWithArr mystack = new MyStackWithArr();
        //入栈3个元素
        mystack.push(new Node(1));
        mystack.push(new Node(2));
        mystack.push(new Node(3));

        //出栈3个元素
        System.out.println(mystack.pop());
        System.out.println(mystack.pop());
        System.out.println(mystack.pop());
    }

输出结果:

Node{next=null, data=3}
Node{next=null, data=2}
Node{next=null, data=1}

可以看到,是后入先出的输出,栈生效了

 

 

用单向链表实现自己的栈

 

以上是关于栈和队列的主要内容,如果未能解决你的问题,请参考以下文章

栈和队列基本操作

栈和队列

博客作业03--栈和队列

博客作业03--栈和队列

栈和队列知识点总结

栈和队列的面试题Java实现