Maison  >  Article  >  Comment implémenter une file d'attente circulaire en langage Go

Comment implémenter une file d'attente circulaire en langage Go

DDD
DDDoriginal
2023-06-05 10:01:391265parcourir

Comment implémenter une file d'attente circulaire en langage go : 1. Créez un exemple de fichier go ; 2. Utilisez la fonction "CustomizedQueue" pour définir la structure des données de la file d'attente ; 2. Utilisez la fonction "NewQueue" pour initialiser la file d'attente ; la fonction « IsFull » pour déterminer si la file d'attente est pleine ; 4. Utilisez la fonction « IsEmpty » pour déterminer si la file d'attente est vide ; 5. Utilisez la fonction « GetQueueLength » pour obtenir le nombre d'éléments de la file d'attente ; Fonctions DeQueue" et "EnQueue" pour déterminer la sortie et la mise en file d'attente des données.

Comment implémenter une file d'attente circulaire en langage Go

L'environnement d'exploitation de cet article : système Windows 10, passez à la version 1.20, ordinateur Dell g3.

La file d'attente est une structure de données couramment utilisée dans les ordinateurs. La caractéristique de cette structure est le premier entré, premier sorti, similaire à lorsque nous faisons la queue pour acheter des choses, premier arrivé, premier servi, sans faire la queue. Ensuite, nous utilisons Go pour implémenter une structure de données de file d'attente circulaire.

Implémentation du langage Go de la méthode de file d'attente circulaire :

// CustomizedQueue 自定义队列数据结构,并且约定保留一个空闲的位置不能被插入
type CustomizedQueue struct {
data    []interface{}
maxSize int
front   int
rear    int
}
// NewQueue 初始化队列
func NewQueue(size int) *CustomizedQueue {
var result = &CustomizedQueue{}
result.maxSize = size + 1
result.data = make([]interface{}, size+1)
result.front = 0
result.rear = 0
return result
}
// IsFull 队列是否满了/*
func (s *CustomizedQueue) IsFull() bool {
return (s.rear+1)%s.maxSize == s.front
}
// IsEmpty 判断是否是空队列/**
func (s *CustomizedQueue) IsEmpty() bool {
return s.data != nil && s.rear == s.front
}
// GetQueueLength 获取队列元素个数/**
func (s *CustomizedQueue) GetQueueLength() int {
return (s.rear - s.front + s.maxSize) % s.maxSize
}
// DeQueue 出队/**
func (s *CustomizedQueue) DeQueue() (interface{}, error) {
if s.IsEmpty() {
return nil, fmt.Errorf("队列为空")
}
result := s.data[s.front]
s.front = (s.front + 1) % s.maxSize
return result, nil
}
// EnQueue 入队/**
func (s *CustomizedQueue) EnQueue(item interface{}) error {
if s.IsFull() {
return fmt.Errorf("队列已满")
}
s.data[s.rear] = item
s.rear = (s.rear + 1) % s.maxSize
return nil
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn