Java - 栈(Stack)的特点 与 栈的基本操作

一.栈的特点

其实我们计算机科学中,一种思想是“先进后出的思想”。在很多算法或应用中,需要用到“先进后出或者是后进先出 的思想”,我们可以考虑用栈来实现。

abcde 这组数按照顺序入栈 :

二.栈的存储结构

顺序存储: 在Java中 会提供给我们一个Stack类它的底层就是数组,就是一个顺序表

链式存储:用地址不连续的空间来存储数据元素,可能需要额外开辟一些空间,来存储“数据元素之间的逻辑关系"。

三.栈的基本操作

在Java提供的Stack类中会有这几中方法

1.push() : 入栈把一个元素放入栈中

2.pop() : 出栈把栈顶元素移除(删除掉)  同时也会返回被删除的值

3.peek() : 得到栈顶的一个元素

4.empty() : 判断栈是否为空  如果为空返回 true  不为空返回 false

5 . serch() : 查询一个值在栈中的位置

public class MyStack {
    public static void main(String[] args) {
        //实例化Stack类
        Stack<Integer> stack = new Stack<>();
        //将 12 23 入栈
        stack.push(12);
        stack.push(23);

        //移除栈顶元素并且返回它的值
        Integer popNum = stack.pop();
        System.out.println("被删除的数为:" + popNum);

        //得到栈顶元素  不删除
        Integer peekNum = stack.peek();
        System.out.println("栈顶的元素为 : " + peekNum);

        //判断栈是否为空
        System.out.println(stack.empty());

        //查询12在栈中的位置   不存在则返回-1
        int index = stack.search(12);
        System.out.println( "12在栈中的位置: " + index);
        
        //查询23在栈中的位置  不存在则返回-1
        int index1 = stack.search(23);
        System.out.println("23在栈中的位置 : " + index1);
    }
}

运行结果为:

 我们也可以自己实现一个栈  下面代码供大家理解:

import java.util.Arrays;

public class MyStack {
    int[] elem;
    int usedSize; // 使用usedSize来记录栈的有效数字
    //这里通过构造方法来给数组初始化
    //初始化长度设置为5
    public MyStack() {
        elem = new int[5];
    }

    //入栈
    public void push(int val) {
        if (isFull()) {
            //如果满了  就给它进行2倍扩容
            this.elem = Arrays.copyOf(this.elem, this.elem.length * 2);
        }
        this.elem[usedSize++] = val;
    }

    //出栈
    public int pop() {
        if (isEmpty()) {
            //如果空 就抛异常
            throw new RuntimeException("栈为空");
        }
        int oldVal = this.elem[--usedSize];
        return oldVal;
    }

    //获得栈顶元素
    public int peek() {
        if (isEmpty()) {
            //如果空 就抛异常
            throw new RuntimeException("栈为空");
        }
        return this.elem[usedSize - 1];
    }

    //判断是不是空
    public boolean isEmpty() {
        return this.usedSize == 0;
    }

    //判断栈(数组)有没有满
    public boolean isFull() {
        return usedSize == this.elem.length;
    }
}

 

//测试类

public class Test {
    public static void main(String[] args) {
        MyStack myStack = new MyStack();
        myStack.push(123);
        myStack.push(789);
        System.out.println("删除栈顶元素: " + myStack.pop());
        System.out.println("获得栈顶元素: " + myStack.peek());
        //判断栈是不是空
        System.out.println(myStack.isEmpty());
    }
}

运行结果为:

总的来说栈是由数组实现的 只不过它的特点是后进先出   大家也可以自己敲一敲上面的代码.

希望能帮助到大家. 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值