俩个队列实现一个栈

首先定义一个队列的类

class queuelink{
    int []elem;
    int front;//队头
    int rear;//队尾
    int usesize=0;//当前循环队列的有效数据个数
    int allsize=10;//

    public queuelink(){
        this(10);
    }
    public queuelink(int size) {

        this.elem=new int[size];
        this.front=0;
        this.rear=0;

    }
    //判断是否为满
    public boolean isfull(){
        if((this.rear+1)%this.allsize==this.front){
            return true;
        }
        return false;

    }

    //入队
    public void push(int val){
        if(isfull()){//如果数组为满的,直接跳出
            return;

        }
        this.elem[this.rear]=val;
        this.rear=(this.rear+1)%this.allsize;
        this.usesize++;
    }
    //判断是否为空
    public boolean isempty(){
        return this.front==this.rear;
    }
    //出队
    public int pop(){
        if(isempty()){
            return -1;
        }
        int num=this.elem[this.front];
        this.elem[this.front]=-1;//把原来第一号元素给覆盖掉
        this.front=(this.front+1)%this.allsize;//让数组下标像后面移动
        this.usesize--;
        return num;
    }
    //得到第一个元素
    public int  getfront(){
        if(isempty()){//如果数组为空,返回-1
            return -1;
        }
        return  this.elem[this.front];}//如果不为空直接返回elem[this.front]  
    //打印队列
    public void show(){
        for(int i=this.front;i<rear;i=(i+1)%this.allsize){//此处不能使用i++,因为最后一个元素的下一个元素的下标为0
            System.out.println(this.elem[i]);
        }
    }
    public   int get(){
        return this.usesize;        
    }
    }

入栈方法:

public static void enter(queuelink q1,queuelink q2,int val){
    queuelink p=null;//先定义一个空队列
    if(!q1.isempty()){//让p指向有数据的队列
        p=q1;

    }else{
        p=q2;
    }    
    p.push(val);//进行入栈
    }

出栈方法:
原理
这里写图片描述

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;
    }//确认好出队的队列,以及将来要把出对后的队列放在什么地方
    //出队

    if(p1.isempty()){//如果p1是空的,说明俩个队列都是空的

    }else{
        while(p1.usesize>1){//出元素:让p1出到只剩下一个
        p2.push(p1.pop());//p2把p1出队的元素进行入队
        }
        return p1.pop();//当p1只剩下一个元素的时候,返回这个值
    }
    return -1;
}

调试代码

    public static void main(String[] args) {
        queuelink q1=new queuelink ();
        queuelink q2=new queuelink ();
        q1.push(6);
        q1.push(4);
        q1.push(3);

        enter(q1,q2,5);
        q1.show();
        System.out.println("==第一次出栈==");
        System.out.println(pop(q1,q2));
        System.out.println("==第二次出栈==");
        System.out.println(pop(q1,q2));
        System.out.println("==第三次出栈==");
        System.out.println(pop(q1,q2));

    }

运行结果
6
4
3
5
==第一次出栈==
5
==第二次出栈==
3
==第三次出栈==
4

猜你喜欢

转载自blog.csdn.net/qq_37232304/article/details/80279783