陣列儲存佇列方式:
1、指定佇列大小不重複使用,相當於一次性使用
2、每次出隊乙個元素,陣列整體向前移動一步;入隊根據座標,快,出隊需要遷移,慢
3、迴圈佇列,空間多次復用,使用佇列時不能將佇列填滿,需要空出乙個位置(推薦)
鍊錶實現佇列:鍊錶實現佇列,出隊快,入隊慢
1、單向佇列:移除節點需要臨時節點
2、雙向佇列:移除節點不需要臨時節點
3、迴圈對了:特殊場景使用,如約瑟夫問題:數數退
陣列優點:陣列實現方式資料入隊快,因為根據索引
陣列缺點:資料擴容時的資料遷移會占用大量時間,以及每次擴容因子等計算
鍊錶優點:資料出隊快,只需要將待刪除節點指引從鍊錶中移除即可
鍊錶缺點:資料入隊需要對鍊錶遍歷,找到隊尾;(可用兩個頭尾臨時節點來解決此問題)
1、陣列實現
1.1 一次性佇列
package com.cjy.chapter19.queue
object arrayqueue01
println
("隊首檢視"
)println
(queue0.
showhead()
)}}/**
* 陣列儲存佇列方式:
* 1、指定佇列大小不重複使用,相當於一次性使用
* 2、每次出隊乙個元素,陣列整體向前移動一步;入隊快,出隊慢
* 3、迴圈佇列,空間多次復用(推薦)
*///方式一:一次性佇列
class
arrayqueue01
(val newmaxsize: int)
else
}//隊列為空
def isempty()
=else
}//入隊
def addele
(ele: int)
=//隊尾後移
last +=
1//新增元素
array
(last)
= ele
ele}//出隊
def getqueue()
= first +=
1array
(first)
}//頭節點檢視
def showhead()
=array
(first +1)
}//佇列檢視
def showqueue()
: unit =
array.
foreach
(x =
>)}
//佇列中元素個數
def size()
=else
}}
1.2 迴圈佇列-自動擴容機制package com.cjy.chapter19.queue
/** * 方式三:迴圈佇列
* 注意事項:
* 1、需要空出乙個位置,因為last是指向最後乙個元素下個座標的,例如當前有9元素,last=9,(9+1)%10=0,所以會空置出來乙個元素
* 2、first==last 時佇列空
* 3、佇列中元素個數 size 計算
* 4、出隊、入隊座標計算,加1 取模 maxsize
* 5、擴容機制,注意擴容因子,縮容因子,資料移動式資料初始化,必須先確定last值再確定first,不然last會受影響
*/object arrayqueue02
println
("出隊11個元素"
) queue0.
showqueue()
println
("長度:"
+queue0.
size()
)println
("frist:"
+queue0.first)
println
("last:"
+queue0.last)
// println("再入隊4個")
// (0 to 3).foreach(queue0.addele(_))
// queue0.showqueue()
// println("隊首檢視")
// println(queue0.showhead())
println
("-------------測試資料擴容機制")}
}class
arrayqueue02
(val newmaxsize: int)
//隊列為空
def isempty()
=//入隊
def addele
(ele: int)
:int =
//檢測資料達到80%,進行2倍擴容if(
size()
>= maxsize*
0.8)
//新增元素
array
(last)
= ele
//隊尾後移
last =
(last +1)
% maxsize
ele}//出隊
def getqueue()
=if(size()
<= maxsize/3)
val i =
array
(first)
first =
(first +1)
% maxsize
i}//頭節點檢視
def showhead()
=array
(first)
}//佇列檢視
def showqueue()
: unit =
for(i <
-0 until size()
)}//佇列中元素個數
def size()
=//資料擴容
def addsize
(nwesize:int,arr:array[int]
): unit =
last =
size()
//隊尾是長度,所以先賦值
first =
0//新的陣列隊首是0,後改,不然會影響last計算
array = newarr //陣列重新指向
maxsize = nwesize //修改最大容量
}// def subsize(size:int,arr:array[int]): unit =
// array = newarr
// }
}
使用陣列實現環形佇列Scala版本
上次我們演示了使用陣列實現佇列的方式,在結尾處提出了乙個問題,因為我們使用雙指標後移的方式,被彈出佇列的元素依然存在陣列中,空間不能被重複利用。這次我們提出了使用陣列和雙指標實現環形佇列的方案。完成資源的利用。基本思路 1.初始化的雙指標head 和tail 的初始值為0,在新增和彈出的時候分別將指...
Scala實現List陣列加法
scala實現list陣列加法 1.如下 scala arr list list 1,2,3 list 3,4,5 list 2 list 0 scala arr1 arr.flatten scala arr.aggregate 10 x,y x y.sum,m,n m n scala arr1.a...
打亂陣列Scala實現
總結 用scala的語法實現打亂陣列 打亂乙個沒有重複元素的陣列。示例 以數字集合 1,2 和 3 初始化陣列。int nums solution solution new solution nums 打亂陣列 1,2,3 並返回結果。任何 1,2,3 的排列返回的概率應該相同。solution.s...