138 lines
2.5 KiB
Go
138 lines
2.5 KiB
Go
package smallrocket
|
|
|
|
import "fmt"
|
|
|
|
type SequentialQueue struct {
|
|
Items []any // 队列元素
|
|
Length int32 // 队列元素个数
|
|
Cap int32 // 队列容量
|
|
}
|
|
|
|
// NewSequentialQueue 初始化队列
|
|
func NewSequentialQueue(cap int32) *SequentialQueue {
|
|
return &SequentialQueue{
|
|
Items: make([]any, 0, cap),
|
|
Length: 0,
|
|
Cap: cap,
|
|
}
|
|
}
|
|
|
|
// Clear 清空队列
|
|
func (queue *SequentialQueue) Clear() {
|
|
queue.Items = []any{}
|
|
}
|
|
|
|
// IsEmpty 判断队列是否为空
|
|
func (queue *SequentialQueue) IsEmpty() bool {
|
|
return queue.Length == 0
|
|
}
|
|
|
|
// IsFull 判断队列是否为满
|
|
func (queue *SequentialQueue) IsFull() bool {
|
|
return queue.Length == queue.Cap
|
|
}
|
|
|
|
// Push 将元素添加到该队列末尾
|
|
func (queue *SequentialQueue) Push(item any) {
|
|
if queue.IsFull() {
|
|
queue.Items = queue.Items[1:]
|
|
queue.Length--
|
|
}
|
|
|
|
queue.Items = append(queue.Items, item)
|
|
queue.Length++
|
|
}
|
|
|
|
// Pop 将该队列首元素弹出并返回
|
|
func (queue *SequentialQueue) Pop() any {
|
|
if queue.IsEmpty() {
|
|
fmt.Println("queue empty")
|
|
return nil
|
|
}
|
|
item := queue.Items[0]
|
|
queue.Items = queue.Items[1:]
|
|
queue.Length--
|
|
return item
|
|
}
|
|
|
|
// Peek 获取该队列首元素但不出队
|
|
func (queue *SequentialQueue) Peek() any {
|
|
if queue.IsEmpty() {
|
|
fmt.Println("queue empty")
|
|
return nil
|
|
}
|
|
return queue.Items[0]
|
|
}
|
|
|
|
// Back 获取该队列尾元素
|
|
func (queue *SequentialQueue) Back() any {
|
|
if queue.IsEmpty() {
|
|
fmt.Println("queue empty")
|
|
return nil
|
|
}
|
|
return queue.Items[queue.Length-1]
|
|
}
|
|
|
|
func (queue *SequentialQueue) GetItems() []any {
|
|
return queue.Items
|
|
}
|
|
|
|
func (q *SequentialQueue) GetFloat64Items() []float64 {
|
|
var retItems []float64
|
|
|
|
for i := q.Length - 1; i >= 0; i-- {
|
|
|
|
switch s := q.Items[i].(type) {
|
|
case float64:
|
|
retItems = append(retItems, s)
|
|
}
|
|
}
|
|
|
|
return retItems
|
|
}
|
|
|
|
func (q *SequentialQueue) GetFloat32Items() []float32 {
|
|
var retItems []float32
|
|
|
|
for i := q.Length - 1; i >= 0; i-- {
|
|
|
|
switch s := q.Items[i].(type) {
|
|
case float32:
|
|
retItems = append(retItems, s)
|
|
}
|
|
}
|
|
|
|
return retItems
|
|
}
|
|
|
|
func (q *SequentialQueue) ShowQueue() {
|
|
|
|
for i := q.Length - 1; i >= 0; i-- {
|
|
|
|
switch s := q.Items[i].(type) {
|
|
case float64:
|
|
//strconv.FormatFloat(s, 'f', -1, 64)
|
|
fmt.Printf(" queue[%d] = %f \t", i, s)
|
|
case float32:
|
|
fmt.Printf(" queue[%d] = %f \t", i, s)
|
|
default:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fmt.Println()
|
|
}
|
|
|
|
type BombTimeToMul struct {
|
|
MinBombTime int32
|
|
MaxBombTime int32
|
|
BombMul int32
|
|
}
|
|
|
|
type BombMulToTime struct {
|
|
MinBombMul int32
|
|
MaxBombMul int32
|
|
BombTime int32
|
|
}
|