数据库--队列和栈练习题

1.用队列实现栈

解题思想:

队列为一边进另一边出,而栈为一边进一边出,所以要实现栈必须要使队列中除队尾元素之外,进行循环尾插到队尾,来实现出栈

import java.util.LinkedList;

class MyStack {

    private LinkedList<Integer> queue;//定义一个链表类的引用queue

    public MyStack() {

        queue = new LinkedList<>();
    }
    public void push(int x) {

        queue.addLast(x);//队列的尾插入栈
    }//栈的入栈
    public int pop() {

        int size = queue.size();

        for (int i = 0; i < size - 1; i++) {

            int v = queue.pollFirst();

            queue.addLast(v);//将队列的队首元素尾插入队尾实现栈的出栈

        }

        return queue.pollFirst(); 

    }//栈的出栈
    public int top() {

        int size = queue.size();

        for (int i = 0; i < size - 1; i++) {

            int v = queue.pollFirst();

            queue.addLast(v);//将队列的队首元素提出来,进行尾插

        }

        int v = queue.pollFirst();

        queue.addLast(v);

        return v;//将原队尾元素出栈

    }//返回栈顶元素
    public boolean empty() {

        return queue.isEmpty();

    }//栈的判空

}

2.用栈实现队列

思路:
使用两个栈用来实现队列
队列的入队:与栈的入栈是一致的
队列的出队:需要两个栈in和out,将所有元素先存在in栈中,判断out栈是否为空,为空直接将元素依尾插到out栈
获取队列的队首元素:进行出队的操作将所有元素放入out栈中,将out栈内栈顶元素出栈
队列的判空:需要in栈和out栈均为空
import java.util.ArrayList;
class MyQueue {
    private ArrayList<Integer>in;
    private ArrayList<Integer>out;//设置了两个ArrayList型变量in和out

    /** Initialize your data structure here. */
    public MyQueue() {
        in=new ArrayList<>();
        out=new ArrayList<>();

    }

    /** Push element x to the back of queue. */
    public void push(int x) {
        in.add(x);//栈的尾插方法
    }//实现队列的入队

    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        if(out.isEmpty()){
            int size=in.size();
            for(int i=0;i<size;i++){
                int v=in.remove(in.size()-1);
                out.add(v);//将in栈中的元素全部压入栈out
            }
        }
        return out.remove(out.size()-1);//remove方法删除指定元素
    }//实现队列的出队

    /** Get the front element. */
    public int peek() {
        if(out.isEmpty()){
            int size=in.size();
            for(int i=0;i<size;i++){
                int v=in.remove(in.size()-1);
                out.add(v);
            }
        }//将in栈中的元素全部压入栈out
        return out.get(out.size()-1); //使用顺序表的get方法获取栈首元素
    }//获取队首元素

    /** Returns whether the queue is empty. */
    public boolean empty() {
        return in.isEmpty()&&out.isEmpty();
    }//队列判空
}
发布了40 篇原创文章 · 获赞 4 · 访问量 874

猜你喜欢

转载自blog.csdn.net/weixin_44919969/article/details/101066618