78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package mq
|
||
|
||
import "fmt"
|
||
|
||
type WorkflowQueue struct {
|
||
buff []string //队列的的数据存储在数组上
|
||
maxsize int //队列最大容量
|
||
front int //队列头索引,不包括自己(队列头索引值-1)
|
||
rear int //队列尾索引
|
||
}
|
||
|
||
func NewQueue(size int) *WorkflowQueue {
|
||
return &WorkflowQueue{
|
||
buff: make([]string, 0, size),
|
||
maxsize: 5,
|
||
front: -1,
|
||
rear: -1,
|
||
}
|
||
}
|
||
|
||
// Push
|
||
// @Description: 压入队列
|
||
// @Author: maxwell.ke
|
||
// @time 2022-10-25 22:58:58
|
||
// @receiver q
|
||
// @param n
|
||
// @return error
|
||
func (q *WorkflowQueue) Push(id string) error {
|
||
if q.rear == q.maxsize-1 {
|
||
if q.front == -1 { //头尾都到头了
|
||
return fmt.Errorf("队列已满,PUSH失败")
|
||
} else {
|
||
q.front = -1
|
||
q.rear = len(q.buff) - 1
|
||
}
|
||
}
|
||
q.rear++
|
||
q.buff = append(q.buff, id)
|
||
return nil
|
||
}
|
||
|
||
// Pop
|
||
// @Description: 出队列
|
||
// @Author: maxwell.ke
|
||
// @time 2022-10-25 23:14:20
|
||
// @receiver q
|
||
// @return n
|
||
// @return err
|
||
func (q *WorkflowQueue) Pop() (id string, err error) {
|
||
if len(q.buff) == 0 {
|
||
return "", fmt.Errorf("空队列,POP失败")
|
||
}
|
||
id = q.buff[0]
|
||
q.buff = q.buff[1:]
|
||
q.front++
|
||
return id, nil
|
||
}
|
||
|
||
// List
|
||
// @Description: 队列遍历
|
||
// @Author: maxwell.ke
|
||
// @time 2022-10-25 23:13:10
|
||
// @receiver q
|
||
// @return error
|
||
func (q *WorkflowQueue) List() error {
|
||
if len(q.buff) == 0 {
|
||
return fmt.Errorf("空队列")
|
||
}
|
||
for i := 0; i < q.maxsize; i++ {
|
||
if i > q.front && i <= q.rear {
|
||
fmt.Println(q.buff[i-q.front-1])
|
||
} else {
|
||
return fmt.Errorf("空队列")
|
||
}
|
||
}
|
||
return nil
|
||
}
|