【数据结构】栈与集合类Stack

目录

一、栈

二、Java中的集合类之Stack

1、介绍

2、构造方法

3、常用方法

1.push

2.pop

3.peek

4.search

5.empty

三、实现Stack

1、准备字段

2、实现判空

3、实现压栈

4、实现出栈

5、实现获取栈尾元素

6、指定元素到栈顶的距离


一、栈

栈(stack)是一种比较简单的数据结构,他插入数据或者删除数据都是只删除末尾的元素,也就是先进后厨。对于栈来说,尾端称为栈顶(top),头端称为栈低(bottom)。不含元素称为空栈。虽然他是一种比较简单的数据结构但是在某些场景下非常适用。

 

二、Java中的集合类之Stack

1、介绍

在Java里,基于栈这个数据结构就有了Stack这一集合类,底层是基于数组实现。我们在使用栈这个数据结构时,不单单可以使用Stack这一集合类,还有LinkedList等

  

2、构造方法

在Stack里只有一个无参构造方法

3、常用方法

1.push

压栈方法,将元素压入栈中也就是放在末尾 

public class Use {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);

        System.out.println(stack);
    }
}

2.pop

出栈方法,将末尾的元素从栈里面拿出

public class Use {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println(stack);

        int val = stack.pop();
        System.out.println(val);
        System.out.println(stack);
    }
}

3.peek

获取栈尾元素方法,获取栈当前末尾的元素,但是不弹出元素

public class Use {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println(stack);

        int val = stack.peek();
        System.out.println(val);
        System.out.println(stack);
    }
}

4.search

指定元素距离栈顶的距离,不存在则返回-1

public class Use {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println(stack);

        int val = stack.search(3);
        System.out.println(val);
    }
}

5.empty

判断当前栈是否为空,空返回真非空返回假

public class Use {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println(stack);

        int val = stack.search(3);
        System.out.println(val);

        boolean isEmpty = stack.empty();
        System.out.println(isEmpty);
    }
}

三、实现Stack

1、准备字段

使用数组模拟实现

2、实现判空

如果有效元素个数为0则栈为空

/**
     * 判断栈是否为空
     * @return
     */
    public boolean empty(){
        return usedSize == 0;
    }

3、实现压栈

将新增数据存入栈尾

/**
     * 压栈操作
     * @param data  数据
     */
    public void push(int data){
        //1.判断是否已满,如果满就扩容
        if(elem.length == usedSize){
            elem = Arrays.copyOf(elem,2 * elem.length);
        }

        //2.插入数据
        elem[usedSize] = data;
        usedSize++;
    }

4、实现出栈

/**
     * 出栈操作
     * @return  栈尾元素
     */
    public int pop(){
        //1.如果栈为空就抛出异常
        if(empty()){
            throw new EmptyStackException();
        }

        //2.不为空时正常出栈
        int val = elem[usedSize - 1];
        usedSize--;
        
        return val;
    }

5、实现获取栈尾元素

/**
     * 获取栈顶元素
     * @return
     */
    public int peek(){
        //1.如果为空则抛出异常
        if(empty()){
            throw new EmptyStackException();
        }
        
        //2.不为空正常获取
        return elem[usedSize - 1];
    }

6、指定元素到栈顶的距离

此处如果栈空或者没有这个元素则返回-1

/**
     * 指定元素到栈顶的距离
     * @param i
     * @return
     */
    public int search(int i){
        //1.找到指定元素返回距离
        for (int j = 0; j < usedSize; j++) {
            if(elem[j] == i){
                return usedSize - i;
            }
        }

        //2,没有找到返回-1
        return -1;
    }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1886i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值