bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

隊列數組實現-環形隊列-創新互聯

1.隊列數組實現

隊列:有序列表,可以用數組和鏈表實現,先進先出原則,

目前累計服務客戶上千家,積累了豐富的產品開發及服務經驗。以網站設計水平和技術實力,樹立企業形象,為客戶提供成都網站制作、成都做網站、外貿營銷網站建設、網站策劃、網頁設計、網絡營銷、VI設計、網站改版、漏洞修補等服務。創新互聯始終以務實、誠信為根本,不斷創新和提高建站品質,通過對領先技術的掌握、對創意設計的研究、對客戶形象的視覺傳遞、對應用系統的結合,為客戶提供更好的一站式互聯網解決方案,攜手廣大客戶,共同發展進步。

尾部加數據(要判斷隊列是否滿),隊首取數據

1.front含義,指向隊首數據的前一個位置;

front的初始值=-1

2.rear含義,指向隊尾數據位置;

rear初始值=-1

3.隊列滿是rear == maxSize-1

4.隊列空是front==rear

5.有效個數是rear-front

代碼實現:

1.隊列類
public class ArrayQueue {//        使用數組模擬隊列
    private int maxSize;//數組的大容量
    private int front;//隊列頭
    private int rear;//隊列尾
    private  int[] arr;//存放數據,模擬隊列

    public ArrayQueue(int arrMaxSize) {this.maxSize=arrMaxSize;
        arr = new int[maxSize];
        front = -1;//指向隊列頭的前一個位置
        rear = -1;//指向隊列尾的位置
    }

//    判斷隊列是否滿
    public boolean isFull(){return rear==maxSize-1;
    }
//    判斷隊列是否為空
    public boolean isEmety(){return rear==front;
    }
//    添加數據到隊列中
    public void addQueue(int ele){if (!isFull()){arr[++rear]=ele;
            return;
        }else {System.out.println("隊列已滿");
        }
    }
//    取出隊列的數據
    public int getQueue(){if (isEmety()){throw new RuntimeException("沒有數據,無法取出");
        }
        return arr[++front];
    }
//    獲取隊首數據,不取出
    public int headQueue(){if (isEmety()){throw new RuntimeException("沒有數據,無法取出");
        }
        return arr[front+1];
    }
//     顯示隊列所有數據
    public void allQueue(){if (isEmety()){System.out.println("沒有數據,無法取出");
            return;
        }
        for (int i = front+1; i< rear+1; i++) {System.out.println(arr[i]);
        }
    }
}
2.測試隊列
public class ArrayQueueDemo {public static void main(String[] args) {ArrayQueue arrayQueue = new ArrayQueue(3);
        boolean flag = true;
        Scanner sc = new Scanner(System.in);
        while (flag){System.out.println("s(show):顯示隊列中的全部數據");
            System.out.println("h(head):獲取隊列中隊首數據");
            System.out.println("a(add):向隊列添加一個數據");
            System.out.println("g(get):取出隊列中的一個元素");
            System.out.println("e(exit):退出程序");
            System.out.print("請輸入操作:");
            char c = sc.next().charAt(0);
            switch (c){case 's':
                    arrayQueue.allQueue();
                    break;
                case 'h':
                    try {int i = arrayQueue.headQueue();
                        System.out.println("隊首的數據是:"+i);
                    } catch (Exception e) {System.out.println(e.getMessage());
                    }
                    break;
                case 'a':
                    System.out.print("請輸入要添加的數據:");
                    int add = sc.nextInt();
                    arrayQueue.addQueue(add);
                    break;
                case 'g':
                    try {int get = arrayQueue.getQueue();
                        System.out.println("取出的數據是:"+get);
                    } catch (Exception e) {System.out.println(e.getMessage());
                    }
                    break;
                case 'e':
                    sc.close();
                    flag = false;
                    break;
                default:
                    System.out.println("輸入錯誤");
                    break;
            }
        }
        System.out.println("程序退出!");
    }
}
3.問題分析:(環形隊列可復用)

1.目前數組只能使用一次,沒有達到復用的效果,將這個數組用一個算法,改進為環形隊列(取模);

1.解決:使用數組模擬環形隊列

1.front含義改變,由指向隊首數據的前一個位置,變成隊首數據位置

front的初始值=0

2.rear含義改變,由指向隊尾數據位置,變成隊尾數據的后一個位置

rear初始值=0

空出一個空間作為約定;

3.隊列滿是由rear == maxSize-1變成(rear+1)%maxSize==front;

4.隊列空不改變,還是front==rear

5.有效個數是(rear+max-front)%max

public class CircleArrayQueue {private int[] arr;
    private int front;
    private int rear;
    private int maxSize;

    public CircleArrayQueue(int maxSize) {this.maxSize = maxSize;
        arr = new int[maxSize];
        front = 0;
        rear = 0;
    }
    public boolean isFull(){return (rear+1)%maxSize==front;
    }
    public boolean isEmepty(){return rear==front;
    }
    //隊列添加元素
    public void addQueue(int ele){if (isFull()){System.out.println("隊列滿了,無法添加元素");
            return;
        }
        arr[rear]=ele;
        rear=(rear+1)%maxSize;
    }
    //取出隊首元素
    public int getQueue(){if (isEmepty()){throw new RuntimeException("隊列沒有元素,無法取出數據");
        }
        int a =  arr[front];
        arr[front]=0;
        front = (front+1) % maxSize;
        return a;
    }

    //顯示隊首元素
    public int headQueue(){if (isEmepty()){throw new RuntimeException("隊列沒有元素,無法取出數據");
        }
        return arr[front];
    }

    //顯示隊列所有數據
    public void allQueue(){if (isEmepty()){System.out.println("沒有數據");
            return;
        }

        int count = size();
        for (int i = front; i< front+count; i++) {System.out.println(arr[i%maxSize]);
        }
    }
    //有效數據個數
    public int size(){return (rear+maxSize-front)%maxSize;
    }
}

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

名稱欄目:隊列數組實現-環形隊列-創新互聯
網頁URL:http://vcdvsql.cn/article8/iieop.html

成都網站建設公司_創新互聯,為您提供做網站企業建站云服務器網站制作網站內鏈企業網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

小程序開發