2 陣列模擬佇列,以及環形佇列

2021-10-09 22:51:11 字數 4139 閱讀 7271

front和rear的初始值都是-1

從隊尾插入乙個資料rear+1

從隊頭取出乙個資料front+1

隊滿 rear == maxszie-1

隊空 front == rear

//使用陣列模擬佇列,編寫乙個arrayqueue類

class

arrayqueue

//判斷佇列是否滿

public

boolean

isfull()

//判斷佇列是否為空

public

boolean

isempty()

//新增資料到佇列,入佇列

public

void

addqueue

(int n)

rear++

;//讓rear後移,說明新增了乙個資料

arr[rear]

= n;

}//獲取佇列的資料,出佇列

public

intgetqueue()

front++

;//front後移

return arr[front];}

//顯示佇列的所有資料

public

void

showqueue()

for(

int i =

0; i < arr.length; i++)}

//顯示佇列的頭資料,注意不是取出資料

public

intheadqueue()

return arr[front+1];}}

scanner scanner = new scanner(system.in)可以實現鍵盤輸入

scanner.next().charat(0);接收乙個字元

int value = scanner.nextint();獲取輸入的數字

scanner.close();關閉scan

public

class

arrayqueuedemo

catch

(exception e)

break

;case

'h':

//檢視佇列頭的資料

trycatch

(exception e)

break

;case

'e':

//退出

scanner.

close()

; loop =

false

;break

;default

:break;}

} system.out.

println

("程式退出");

1. 但是這種佇列有乙個缺點,無法迴圈使用,當我把佇列裡面的資料全部取出來之後,無法再次插入

2. 因為我們對陣列是否裝滿的判斷是rear等於maxszie-1

3. 所以我們為了解決這種問題,需要使用到環形佇列

front和rear的初始值都是0

隊滿 (rear+1)%maxsize==front

隊空 front == rear

加入乙個數

//直接將資料加入

arr[rear]

= n;

//將rear後移,這裡必須考慮取模,這個就是模擬環形佇列的主要思想

rear =

(rear+1)

%maxsize;

取出乙個數

int value = arr[front]

;

front =

(front+1)

%maxsize;

return value;

遍歷一遍所有的資料

//顯示佇列的所有資料

public

void

showqueue()

// 思路:從front開始遍歷,遍歷多少個元素

//for

(int i = front; i < front +

size()

; i++)}

//求出當前佇列的有效資料的個數

public

intsize()

舉個例子:

例子2:

這個時候我連續插入3個資料,並取出乙個資料,那麼rear現在等於0 ,front現在等於1

那麼如果是普通佇列,就無法再插入資料了,因為我的rear 已經大於 maxsize-1 了

但是我使用了環形佇列,我現在再次插入乙個資料5

那麼arr[0] == 5 ,rear = [0+1] % 3 =1

這就模擬了環形佇列

當我再次取出2個資料,那麼front 也等於0了,這裡也實現了迴圈

//使用陣列模擬迴圈佇列,編寫乙個arrayqueue類

class

arrayqueue2

//判斷佇列是否滿

public

boolean

isfull()

//判斷佇列是否為空

public

boolean

isempty()

//新增資料到佇列,入佇列

public

void

addqueue

(int n)

//直接將資料加入

arr[rear]

= n;

//將rear後移,這裡必須考慮取模

rear =

(rear+1)

%maxsize;

}//獲取佇列的資料,出佇列

public

intgetqueue()

//這裡需要分析front是指向佇列的第乙個元素

//1.先把front 對應的值保留到乙個臨時的變數

//2.將front後移 考慮取模

//3.將臨時儲存的變數返回

int value = arr[front]

; front =

(front+1)

%maxsize;

return value;

}//顯示佇列的所有資料

public

void

showqueue()

// 思路:從front開始遍歷,遍歷多少個元素

//for

(int i = front; i < front +

size()

; i++)}

//求出當前佇列的有效資料的個數

public

intsize()

//顯示佇列的頭資料,注意不是取出資料

public

intheadqueue()

return arr[front];}

}

public

class

arrayqueuedemo2

catch

(exception e)

break

;case

'h':

//檢視佇列頭的資料

trycatch

(exception e)

break

;case

'e':

//退出

scanner.

close()

; loop =

false

;break

;default

:break;}

} system.out.

println

("程式退出");

}}

陣列模擬佇列 以及佇列的復用(環形佇列)

private int front 指向佇列頭的第乙個元素 privat int maxszie 設定佇列的最大長度 private int rear 指向佇列尾的最後乙個元素的後乙個位置,留出乙個位置作為約定 因為需要留出乙個位置作為約定,那麼當陣列的maxsize 4 的時候有效資料的個數就等於...

陣列模擬環形佇列

class queue 判斷佇列是否滿 public boolean isfull 判斷佇列是否為空 public boolean isempty 新增資料 param n 新增資料的值 public void addqueue int n arr rear n 注意 這裡一定要 去摸 而且 注意 ...

陣列模擬環形佇列

package queue 陣列模擬環形佇列 public class queue public void add int element else public intremove throws exception int temp arr front front front 1 size ret...