数组实现stack和queue,及其相互实现

queue:先进先出
stack:先进后出

stack实现queue
一般写法 两个stack,元素的出和进都放到stack1,每进一个就倒2次(s1->s2 s1存新 s2->s1),把后加进来的放到最下面;
高性能算法:s1负责出,s2负责入
入队时,s2若为空,将s1导入s2,然后将元素压入s2;s2不为空,元素直接加入s2
出队时,判断s1是否为空,如不为空,则直接弹出顶元素;如为空,则将s2的元素逐个“倒入”s1,把最后一个元素弹出并出队。
这个思路,避免了反复“倒”栈,仅在需要时才“倒”一次。

用queue实现stack
也需要两个queue,放入的时候直接到有数的queue中即可,后进入的在队尾;但是出的时候因为要出队尾的,所以逐个将元素转移到另一个queue,最后一个的时候直接返回即可;
或者新来的放进空的queue1,另一个queue的逐个塞入queue1

数组实现stack:挨个向后放即可,出的时候顶端开始出

数组实现对列:保持左边是最先进来的,移除的时候移除第一个,别的左移,保持第0位是最先进来的
第二种方案:来个标志位 oldest+size,oldest=contenntSize-1出时,oldest=0.

下面仅仅给出用stack实现queue的方案:

public class QueueWithStack {

    Stack stack1;
    Stack stack2;
    public int size = 0;
    // 记录压出栈的总次数
    public static  int  operate = 0;


    public QueueWithStack(){
        this.stack1 = new Stack<>();
        this.stack2 = new Stack<>();
    }
    public void add(String s){
        if(size == 0){
            stack1.push(s);
        }else{
            for(int i =0;i 0 && stack1.isEmpty()){
            for(int i=0; i

 

你可能感兴趣的:(对列,数组,栈,算法)