数据结构——栈和队列

目录

一、栈

二、队列


一、栈

栈是Vector的一个子类,它实现了一个标准的先进后出的栈。堆栈只定义了默认构造函数,用来创建一个空栈。堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。

方法描述
boolean isEmpty()判断栈是否为空
Object peek()查看栈顶的元素,但不删除
Object pop()删除栈顶的元素,并返回
Object push(Object element)把项压入栈顶
int search(Object element)返回对象在堆栈中的位置,以 1 为基数

使用栈的场景:需要方向序列时,可以想到栈        1、2、3、4 —> 4、3、2、1

                         需要回溯的时候,可以想到栈 

                         需要深度优先遍历的时候,可以想到栈

Java示例:

    public static void main(String[] args) {
        // 实现类是 LinkedList 对象
        // 引用是 Deque 接口
        // 变量名 stack : 表示定义了一个栈
        Deque<Integer> stack = new LinkedList<>();

        stack.push(100);
        stack.push(200);
        stack.push(300);
        stack.push(400);

        // 4 400 4 | 4 400 3 | 3 300 3 | 3 300 2 | 2 200 2 | 2 200 1 | 1 100 1 | 1 100 0
        while (!stack.isEmpty()) {
            System.out.println(stack.size());
            System.out.println(stack.peek());
            System.out.println(stack.size());
            System.out.println("==========================");
            System.out.println(stack.size());
            System.out.println(stack.pop());
            System.out.println(stack.size());
            System.out.println("==========================\n\n");
        }
    }

二、队列

        队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。常见的方法:

方法描述
add(e)增加一个元素,如果队列已满,抛异常
remove()移除并返回头部的元素,如果对列为空,抛异常
element()返回对列头部的元素,如果对列为空,抛异常
offer(e)添加一个元素并返回true,如果对列已满,返回false
poll()移除并返回对列头部的元素,如果对列为空,则返回null
peek()返回对列头部的元素,如果对列为空,则返回null
put(e)添加一个元素,如果对列已满,则阻塞
take()移除并返回对列头部的元素,如果对列为空,则阻塞

使用对列的场景: 需要公平性

                           进行广度优先遍历的时候,可以想到对列

 Java示例:

    public static void main(String[] args) {
        //add()和remove()方法在失败的时候会抛出异常(不推荐)
        Queue<String> queue = new LinkedList<String>();
        //添加元素
        queue.offer("a");
        queue.offer("b");
        queue.offer("c");
        queue.offer("d");
        queue.offer("e");
        for (String q : queue) {
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("poll=" + queue.poll()); //返回第一个元素,并在队列中删除
        for (String q : queue) {
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("element=" + queue.element()); //返回第一个元素 
        for (String q : queue) {
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("peek=" + queue.peek()); //返回第一个元素 
        for (String q : queue) {
            System.out.println(q);
        }
    }

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值