用Java实现 通过两个栈实现一个队列

博客围绕用两个栈实现队列展开,要求实现队列的appendTail和deleteHead两个函数,分别用于在队列尾部插入结点和在队列头部删除结点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:用两个栈实现一个队列。队列的生命如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。


package 数据结构;

import java.util.Stack;

/**
*题目:用两个栈实现一个队列。队列的生命如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
*/
public class Queue {
//栈的特点 后进先出
//队列 先进先出
//用两个栈实现一个队列
/**
 *思路:首先,用一个栈用来接收添加的元素。通过观察发现,将接收的队列翻转后,即与队列中存放的元素顺序相同,
 *所以,可以在另一个栈中接收其翻转的队列,并且在反转后的队列中进行弹栈操作。所以不断访问翻转后的栈的栈顶元素,
 *如果访问到需要出栈的元素是,停止访问, 进行弹栈。
 *
 */
    Stack<Integer> addStack = new Stack<Integer>();
    Stack<Integer> popStack = new Stack<Integer>();


    public void appendTail(int element) {
        addStack.push(element);
    }

    public void deleteHead(int element) {
        //用来判断当前栈内是否有即将被弹栈的元素,如果没有,则不进行弹栈。
        Boolean isHasElement = false;
        while (!addStack.isEmpty()) {
            popStack.push(addStack.peek());
            addStack.pop();
        }
        for (int a : popStack) {
            if (a == element) {
                isHasElement = true;
            }
        }
        if (!popStack.isEmpty()) {
            if (isHasElement) {
                while (!popStack.isEmpty() && !popStack.peek().equals(element)) {
                    System.out.println("被弹出的元素:" + popStack.peek().toString() + " ");
                    popStack.pop();
                }
                // 最后那个要被弹出的元素
                if (!popStack.isEmpty()) {
                    popStack.pop();
                }
            }
            while (!popStack.isEmpty()) {
                addStack.add(popStack.peek());
                popStack.pop();
            }
        }
    }

    public String toString() {
        while (!addStack.isEmpty()) {
            System.out.println("列表剩余元素:" + addStack.pop().toString());
        }
        return null;
    }

    /**
     * 这里有个疑问,不知道是否可以让一个没有在该对列的数字进行出列,如果可以让其出列。
     * 有两种实现,一:在前面出列时遍历队列中是否有该数,二是在操作deleteHead的时候判断。
     * 现用方法二。
     */
    public static void main(String[] args) {
        Queue queue = new Queue();
        queue.appendTail(1);
        queue.appendTail(2);
        queue.appendTail(2);
        queue.appendTail(2);
//      queue.deleteHead(2);
        queue.appendTail(3);
        queue.appendTail(4);
        queue.appendTail(5);
        queue.deleteHead(9);
        queue.appendTail(6);
        queue.appendTail(4);
        queue.deleteHead(2);
        queue.toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值