普通队列与循环队列

普通队列

/**
 * Created by guipengfei on 2020/8/4 20:12
 */
public class QueueByArray {
    
    
    public  static  void  main(String args[])
    {
    
    
          ArrayQueue arrayQueue=new ArrayQueue(4);
          int x=arrayQueue.DeQueue();//第一次出队为空
          arrayQueue.EnQueue(1);//添加队列元素
          arrayQueue.EnQueue(2);
          arrayQueue.EnQueue(3);
          arrayQueue.EnQueue(4);
          arrayQueue.EnQueue(5);
          arrayQueue.showQueue();//显示队列元素
           x=arrayQueue.DeQueue();//获取队头元素,但不出队
           System.out.println(x);
           int y=arrayQueue.topQueue();
           System.out.println(y);
           arrayQueue.showQueue();
    }
}
class ArrayQueue{
    
    
    int maxSize;//队列的最大长度
    int front;//指向队头的前一个位置
    int rear;//指向队尾元素
    int arr[];//模拟队列的数组
    public ArrayQueue(int maxSize)
    {
    
    
        this.maxSize=maxSize;
        front=-1;
        rear=-1;
        arr=new int[maxSize];
    }
    public void EnQueue(int elem)
    {
    
    
        if (rear==maxSize-1)
        {
    
    
            System.out.println("队列已满,不能再添加");
            return;
        }
        rear++;
        arr[rear]=elem;
        System.out.println("添加成功");
    }
    public int DeQueue()
    {
    
    
        if(rear==front)
        {
    
    
            System.out.println("队列已空");
           return  -1;
        }
        System.out.println("出队成功");
        return arr[++front];

    }
    public int topQueue()
    {
    
    
        if(rear==front)
        {
    
    
            System.out.println("队列已空");
            return  -1;
        }
        return arr[front+1];
    }
    public boolean isFull()
    {
    
    
        return rear==maxSize-1;
    }
    public boolean isEmpty()
    {
    
    
        return rear==front;
    }
    public void showQueue()
    {
    
    
        if(rear==front)
        {
    
    
            System.out.println("队列已空");
            return;
        }
        for(int i=front+1;i<=rear;i++)//第一个元素是front+1
            System.out.print(arr[i]+" ");
        System.out.println();
    }
}

循环队列

/**
 * Created by guipengfei on 2020/8/4 21:16
 */
public class CircleQueue {
    
    
    public static void main(String args[])
    {
    
    
        QueueCircle queueCircle=new QueueCircle(3);//空出一个位置,实际只能放2个
        queueCircle.DeQueue();
        queueCircle.EnQueue(1);
        queueCircle.EnQueue(2);
        queueCircle.showQueue();
        queueCircle.EnQueue(3);
        queueCircle.EnQueue(4);
        queueCircle.DeQueue();
        queueCircle.EnQueue(4);
        queueCircle.showQueue();


    }
}
class QueueCircle{
    
    
    int maxSize;//队列的最大长度
    int front;//指向队头元素
    int rear;//指向队尾元素的下一个位置
    int arr[];//模拟循环队列的数组
    public QueueCircle(int maxSize)
    {
    
    
        this.maxSize=maxSize;
        front=0;
        rear=0;
        arr=new int[maxSize];
    }
    public void EnQueue(int elem)
    {
    
    
        if ((rear+1)%maxSize==front)
        {
    
    
            System.out.println("队列已满,不能再添加");
            return;
        }
        arr[rear]=elem;
        rear=(rear+1)%maxSize;
        System.out.println("添加成功");
    }
    public int DeQueue()
    {
    
    
        if(rear==front)
        {
    
    
            System.out.println("队列已空");
            return  -1;
        }
        System.out.println("出队成功");
        int value=arr[front];
        front=(front+1)%maxSize;
        return value;

    }
    public int topQueue()
    {
    
    
        if(rear==front)
        {
    
    
            System.out.println("队列已空");
            return  -1;
        }
        return arr[front];
    }
    public boolean isFull()
    {
    
    
        return rear+maxSize-front==maxSize;
    }
    public boolean isEmpty()
    {
    
    
        return rear==front;
    }
    public void showQueue()
    {
    
    
        if(rear==front)
        {
    
    
            System.out.println("队列已空");
            return;
        }
        for(int i=front;i<front+size();i++)//第一个元素是front+1
            System.out.print(arr[i]+" ");
        System.out.println();
    }
    public int size()
    {
    
    
        return (rear-front+maxSize)%maxSize;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43478694/article/details/107800470