LeetCode-58-最後一個單詞的長度-不定義變數計算小於127位單詞長度(C)
阿新 • • 發佈:2021-02-01
1.佇列介紹
1)佇列是一個有序列表,可以用陣列或是連結串列實現。
2)遵循先進先出原則。即:先存入列表的資料,先取出。後存入的後取出
2.陣列模擬迴圈佇列思路
1)佇列的輸出、輸入時分別從前後兩端來處理,因此需要兩個變數front(隊頭)及rear(隊尾)來實現輸入及輸出。
2)front初始值=0;front指向佇列的第一個元素。
3)rear的初始值=0;rear指向佇列的最後一個元素的後一個位置。因此佇列的最大容量比陣列的長度少1。
4)佇列滿的條件為(rear+1)%array.length(陣列長度)==front。
5)佇列空的條件為front==rear
6)佇列中有效資料的個數**(rear+array.length-front)%array.length**。
程式碼實現
public class CricleArrayQueue {
private int[] array;
//隊頭
private int front;
//隊尾
private int rear;
//建立陣列
public CricleArrayQueue(int maxSize){
this.array=new int[maxSize];
}
//判斷佇列是否滿
public boolean isFull(){
if((rear+1)%array.length==front){
return true;
}
return false;
}
//判斷佇列是否空
public boolean isEmpty(){
if(front==rear){
return true;
}
return false;
}
//求出佇列中有效資料個數
public int size(){
return (rear+array.length-front)%array.length;
}
//入隊
public void addQueue(int element)throws Exception{
if(isFull()){
throw new Exception("佇列已滿");
}
array[rear]=element;
//隊尾往下移一位
rear=(rear+1)%array.length;
}
//出隊
public int deQueue() throws Exception{
if(isEmpty()){
throw new Exception("佇列已空");
}
int deQueueElement=array[front];
front=(front+1)%array.length;
return deQueueElement;
}
//輸出有效佇列
public void outPut(){
//先判斷是否為空佇列
if(isEmpty()){
System.out.println("佇列為空,無法輸出");
return;
}
//把佇列想成一個環
//那麼front+size()為輸出個數!
for(int i=front;i<front+size();i++){
System.out.println(array[i%array.length]);
}
}
}
測試程式碼
//測試
public static void main(String[] args) {
CricleArrayQueue queue=new CricleArrayQueue(4);
System.out.println("佇列個數為:"+queue.size());
queue.outPut();
try{
queue.addQueue(23);
queue.addQueue(24);
queue.addQueue(87);
queue.addQueue(34);
}catch(Exception e){
System.out.println(e.getMessage());
}
try{
queue.deQueue();
queue.deQueue();
queue.deQueue();
}catch(Exception e){
System.out.println(e.getMessage());
}
try{
queue.addQueue(34);
queue.addQueue(37);
}catch(Exception e){
System.out.println(e.getMessage());
}
queue.outPut();
System.out.println("佇列個數為:"+queue.size());
}
結果如下: