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.
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!