Maison > Problème commun > Comment implémenter une file d'attente circulaire en langage Go

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

DDD
Libérer: 2023-06-05 10:52:27
original
1271 Les gens l'ont consulté

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
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal