【数算-02】队列

package array_queue;



/**
 * @author zhihua.li
 * @date 2020/10/6 - 8:44
 **/

public class ArrayQueue {
    
    
    private int front;  //指向队列头
    private int rear;   //指向队列尾
    private int maxSize;    //数组的最大容量
    private int []arr;  //用数组模拟队列

//    创建队列
    public ArrayQueue(int arrMaxSize){
    
    
        maxSize = arrMaxSize;
        arr = new int[maxSize];
//        初始化队列头、尾指针为-1
        front = -1;
        rear = -1;
    }

//    队满判断
    public boolean isFull(){
    
    
        return rear == maxSize-1;
    }

//    队空判断
    public boolean isEmpty(){
    
    
        return rear == front;   //队头指针与队尾指针重合
    }

//    入队操作
    public void addElem(int data){
    
    
//        判断是否队满
        if(isFull()){
    
    
            throw new RuntimeException("队列满,不能入队");
        }
        arr[++rear] = data;     //rear后移,同时为下一个位置赋值
    }

//    出队操作
    public int getElem(){
    
    
//        判断是否为空队列
        if(isEmpty()){
    
    
            throw new RuntimeException("队列空,不能出队");
        }
        return arr[++front];
    }

//    获取队列中的所有元素
    public void showQueue(){
    
    
//        判断队列是否为空
        if(isEmpty()){
    
    
            throw new RuntimeException("队列空,无法获取任何元素");
        }
        for (int i=0;i<maxSize;i++) {
    
    
            System.out.printf("arr[%d] = %d\n", i, arr[i]);
        }
    }

//    显示队列头部数据,不出队
    public int getHeadElem(){
    
    
//        判断队列是否为空
        if(isEmpty()){
    
    
            throw new RuntimeException("队列空,无法获取任何元素");
        }
        return arr[front+1];

    }

}

测试:

package array_queue;

import java.util.Scanner;

/**
 * @author zhihua.li
 * @date 2020/10/6 - 9:14
 **/
public class ArrayQueueTest {
    
    

    public static void testArrayQueue(){
    
    
        ArrayQueue queue = new ArrayQueue(3);
        char key = ' '; //接受用户输入
        Scanner scanner = new Scanner(System.in);
        boolean loop = true;
        while(loop){
    
    
            System.out.println("========================");
            System.out.println("请选择您要使用的功能:");
            System.out.println("s(show):显示队列");
            System.out.println("a(add):数据入队");
            System.out.println("g(get):数据出队");
            System.out.println("h(head):获取队列头数据");
            System.out.println("e(exit):退出程序");
            System.out.println("请输入您的需求:");
            key = scanner.next().charAt(0);     //接受一个字符
            switch (key){
    
    
                case 's':   //显示队列中的数据
                    try {
    
    
                        System.out.println("队列为:");
                        queue.showQueue();
                    }catch (Exception e){
    
    
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'a':   //加数据
                    try {
    
    
                        System.out.println("请输入你要添加的数据:");
                        int data = scanner.nextInt();
                        queue.addElem(data);
                    }catch (Exception e){
    
    
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'g':   //取数据
                    try{
    
    
                        int data2 = queue.getElem();
                        System.out.printf("取出的数据是:%d\n",data2);
                    }catch (Exception e){
    
    
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'h':   //取出队列头数据
                    try{
    
    
                        int head = queue.getHeadElem();
                        System.out.println("取出的队头数据为:"+head);
                    }catch (Exception e){
    
    
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'e':
                    scanner.close();
                    loop = false;
                    break;
                default:
                    break;
            }
        }
        System.out.println("程序退出!");
    }

    public static void main(String[] args) {
    
    
        testArrayQueue();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45729934/article/details/112982651