17 . 用两个队列实现一个栈

用两个队列实现一个栈

1.入栈

入队的时候看哪个栈队列为空则给哪个入队。


public static void enterStack(QueueLink q1,QueueLink q2,int val){
    QueueLink p = null;
    if(!q1.isEmpty()){
        p = q1;
    }else{
	p = q2;
    }
	p.push(val);;
}

2.出栈

每次使p1指向要出队的队列,p2指向一个空队列,为要入队的队列,将p1依次出队,p1的值依次入队到p2中,直到p1中只剩一个元素,出队即可,队列p1最后出队的值就是最后入队的值,也就符合了栈先进后出的特点。

public static int pop(QueueLink q1,QueueLink q2){
    QueueLink p1 = null;//永远指向出队的队列
    QueueLink p2 = null;//永远指向出队后的元素需要放置的位置。
    if(!q1.isEmpty()){
	p1 = q1;
	p2 = q2;
    }else{
	p1 = q2;
	p2 = q1;
    }
    //确认好出队的队列以及将来需要把出队后放在什么地方。
    //开始出队。
    int num = -1;
    if(p1.isEmpty()){
	return -1;
    }else{
	//出元素,只剩下一个。
	while(p1.getSize() > 1){
	    num = p1.pop();//把p1指向的队列出队只剩一个元素。
	    p2.push(num);//把p1的元素依次放入p2中。
	}
    }
    return p1.pop();
}

3.测试结果

public static void main(String[] args) {
    QueueLink q1 = new QueueLink();
    QueueLink q2 = new QueueLink();
    enterStack(q1,q2,1);
    enterStack(q1,q2,3);
    enterStack(q1,q2,5);
    enterStack(q1,q2,2);
    enterStack(q1,q2,4);
    System.out.println(pop(q1,q2));
    System.out.println(pop(q1,q2));
    System.out.println(pop(q1,q2));
    System.out.println(pop(q1,q2));
    System.out.println(pop(q1,q2));
}

猜你喜欢

转载自blog.csdn.net/Alyson_jm/article/details/80276533
今日推荐