上次我們演示了使用陣列實現佇列的方式,在結尾處提出了乙個問題,因為我們使用雙指標後移的方式,被彈出佇列的元素依然存在陣列中,空間不能被重複利用。
這次我們提出了使用陣列和雙指標實現環形佇列的方案。完成資源的利用。
基本思路:
1. 初始化的雙指標head 和tail 的初始值為0,在新增和彈出的時候分別將指標後移。那麼實際的tail指標是指向了最後乙個數字的下一位。因此環形佇列的實際儲存長度為 陣列長度-1
2. 利用tail 和head 對陣列長度取模的方式,完成在前面的資源位置利用
3. 判斷佇列滿的條件是 (tail +1) % arrsize == head ,因為tail有可能大於head 因此需要取模
4. 注意,在顯示佇列的內容時候,分為了 tail>head 正常儲存方式 和tail < head 利用空間 的兩種展示方式
package com.xipenhui.cn
import scala.io.stdin
object circlearraytest
case
"show"
=>queue.showqueue(
)case
"pop"
=> println(s"出佇列元素為:$"
)case
"size"
=>println(s"佇列長度為$"
)case
"head"
=>println(s"佇列頭為$"
)case
"exit"
=> system.exit(0)
}}}}
class circclearrayqueue(arrmaxsize:
int)
//判斷是否為空
def isempty()=
//新增資料
def addqueue(num:
int)
:unit
= arr(tail)
= num
tail =
(tail +1)
% maxsiza
}//彈出元素
def popqueue():
int=
val res = arr(head)
arr(head)=0
head =
(head +1)
% maxsiza
res}//顯示佇列,增加遍歷的長度,對i取模求值
def showqueue()=
if(tail > head)
) = $")}
}else
) = $")}
}}//檢視佇列頭
def headelement()=
arr(head)
}//佇列長度,補齊位
def size()=
}
用陣列實現環形佇列
class circlearray 判斷佇列滿 boolean型,返回 ture 或 false public boolean isfull 判斷佇列空 public boolean isempty 寫資料,僅限 int 型 public void addqueue int n arr rear n...
102 scala 陣列實現佇列
陣列儲存佇列方式 1 指定佇列大小不重複使用,相當於一次性使用 2 每次出隊乙個元素,陣列整體向前移動一步 入隊根據座標,快,出隊需要遷移,慢 3 迴圈佇列,空間多次復用,使用佇列時不能將佇列填滿,需要空出乙個位置 推薦 鍊錶實現佇列 鍊錶實現佇列,出隊快,入隊慢 1 單向佇列 移除節點需要臨時節點...
陣列模擬環形佇列
class queue 判斷佇列是否滿 public boolean isfull 判斷佇列是否為空 public boolean isempty 新增資料 param n 新增資料的值 public void addqueue int n arr rear n 注意 這裡一定要 去摸 而且 注意 ...