代码随想录-算法训练营day10【栈与队列01:理论基础、用栈实现队列、用队列实现栈】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客

bash 复制代码
 第五章 栈与队列part01
● day 1 任务以及具体安排:https://docs.qq.com/doc/DUG9UR2ZUc3BjRUdY  
● day 2 任务以及具体安排:https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG  
● day 3 任务以及具体安排:https://docs.qq.com/doc/DUGdqYWNYeGhlaVR6 
● day 4 任务以及具体安排:https://docs.qq.com/doc/DUFNjYUxYRHRVWklp 
● day 5 周日休息
● day 6 任务以及具体安排:https://docs.qq.com/doc/DUEtFSGdreWRuR2p4 
● day 7 任务以及具体安排:https://docs.qq.com/doc/DUElCb1NyTVpXa0Jj 
● day 8 任务以及具体安排:https://docs.qq.com/doc/DUGdsY2JFaFhDRVZH 
● day 9 任务以及具体安排:https://docs.qq.com/doc/DUHVXSnZNaXpVUHN4 

今日任务:
● 理论基础
● 232.用栈实现队列
● 225. 用队列实现栈
理论基础 

了解一下 栈与队列的内部实现机智,文中是以C++为例讲解的。 

文章讲解:https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html   

 232.用栈实现队列 

大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97.html   

  225. 用队列实现栈 

可以大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。 

建议大家掌握一个队列的方法,更简单一些,可以先看视频讲解

题目链接/文章讲解/视频讲解:https://programmercarl.com/0225.%E7%94%A8%E9%98%9F%E5%88%97%E5%AE%9E%E7%8E%B0%E6%A0%88.html  

目录

理论基础

1、栈(Stack)

2、队列(Queue)

0232_用栈实现队列

0225_用队列实现栈


理论基础

栈(Stack)和队列(Queue)是两种常见的数据结构,它们在 Java 中都有对应的类和接口,并且都有一些常用的函数或方法。以下是它们的常用函数或方法:

1、栈(Stack)

在 Java 中,栈的常用函数和方法包括:

  1. push(E item): 将元素压入栈顶。
  2. pop(): 弹出栈顶元素并返回。
  3. peek(): 返回栈顶元素但不移除。
  4. empty(): 判断栈是否为空。
  5. search(Object o): 查找指定元素在栈中的位置,从栈顶开始计数,返回距离栈顶最近的位置。

Java 中的栈类是 java.util.Stack,它是 Vector 类的一个子类,使用它可以实现栈的基本功能。

2、队列(Queue)

在 Java 中,队列的常用函数和方法包括:

  1. add(E e)offer(E e): 向队尾添加一个元素。
  2. remove()poll(): 移除并返回队列头部的元素。
  3. element()peek(): 返回队列头部的元素但不移除。
  4. isEmpty(): 判断队列是否为空。
  5. size(): 返回队列中的元素个数。
  6. clear(): 清空队列。

Java 中的队列接口有多个实现类,最常见的是 java.util.LinkedList(链表实现的队列)和 java.util.ArrayDeque(数组实现的队列),它们都实现了 Queue 接口。

需要注意的是,Stack 类和 Vector 类以及它们的方法在 Java 中被认为是不推荐使用的,因为它们的同步操作可能导致性能下降。推荐使用 ArrayDequeLinkedList 作为栈和队列的实现。

0232_用栈实现队列

java 复制代码
import java.util.Stack;

class MyQueue {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    /**
     * Initialize your data structure here.
     */
    public MyQueue() {
        stackIn = new Stack<>();  //负责进栈
        stackOut = new Stack<>(); //负责出栈
    }

    /**
     * Push element x to the back of queue.
     */
    public void push(int x) {
        stackIn.push(x);
    }

    /**
     * Removes the element from in front of queue and returns that element.
     */
    public int pop() {
        dumpstackIn();
        return stackOut.pop();
    }

    /**
     * Get the front element.
     */
    public int peek() {
        dumpstackIn();
        return stackOut.peek();
    }

    /**
     * Returns whether the queue is empty.
     */
    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }

    //如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
    private void dumpstackIn() {
        if (!stackOut.isEmpty()) return;
        while (!stackIn.isEmpty()) {
            stackOut.push(stackIn.pop());
        }
    }
}

0225_用队列实现栈

java 复制代码
import java.util.LinkedList;
import java.util.Queue;

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */
class MyStack225 {
    Queue<Integer> q;

    public void MyStack225() {
        q = new LinkedList<>();
    }

    //将元素x压入栈顶。
    public void push(int x) {
        q.offer(x);
        int size = q.size();
        //q.add(x);
        while (size > 0) {
            q.offer(q.poll());
            size--;
        }
    }

    //移除并返回栈顶元素。
    public int pop() {
        return q.poll();
    }

    //返回栈顶元素。
    public int top() {
        return q.peek();
    }

    //如果栈是空的,返回true;否则,返回false。
    public boolean empty() {
        return q.isEmpty();
    }
}
相关推荐
AIAdvocate3 分钟前
Pandas_数据结构详解
数据结构·python·pandas
jiao0000129 分钟前
数据结构——队列
c语言·数据结构·算法
kaneki_lh33 分钟前
数据结构 - 栈
数据结构
铁匠匠匠33 分钟前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
C-SDN花园GGbond34 分钟前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处2 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ2 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
leon6252 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林2 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z2 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表