使用陣列實現環形佇列Scala版本

2021-10-09 22:36:43 字數 1433 閱讀 9553

上次我們演示了使用陣列實現佇列的方式,在結尾處提出了乙個問題,因為我們使用雙指標後移的方式,被彈出佇列的元素依然存在陣列中,空間不能被重複利用。

這次我們提出了使用陣列和雙指標實現環形佇列的方案。完成資源的利用。

基本思路:

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 注意 這裡一定要 去摸 而且 注意 ...