Heim  >  Artikel  >  So implementieren Sie eine kreisförmige Warteschlange in der Go-Sprache

So implementieren Sie eine kreisförmige Warteschlange in der Go-Sprache

DDD
DDDOriginal
2023-06-05 10:01:391204Durchsuche

So implementieren Sie eine zirkuläre Warteschlange in der Go-Sprache: 1. Erstellen Sie eine Go-Beispieldatei. 2. Verwenden Sie die Funktion „CustomizedQueue“, um die Warteschlangendatenstruktur zu definieren. 3. Verwenden Sie die Funktion „NewQueue“. die Funktion „IsFull“, um festzustellen, ob die Warteschlange voll ist. 4. Verwenden Sie die Funktion „IsEmpty“, um festzustellen, ob die Warteschlange leer ist. 5. Verwenden Sie die Funktion „GetQueueLength“, um die Anzahl der Warteschlangenelemente zu ermitteln. „DeQueue“- und „EnQueue“-Funktionen zur Bestimmung des Dequeue- und Enqueue-Vorgangs von Daten.

So implementieren Sie eine kreisförmige Warteschlange in der Go-Sprache

Die Betriebsumgebung dieses Artikels: Windows 10-System, Go-Version 1.20, Dell G3-Computer.

Warteschlange ist eine häufig verwendete Datenstruktur in Computern. Das Merkmal dieser Struktur ist das Prinzip „Wer zuerst reinkommt, mahlt zuerst“, ähnlich wie wenn wir uns anstellen, um Dinge zu kaufen, wer zuerst kommt, mahlt zuerst, also kein Schlangestehen. Als nächstes verwenden wir Go, um eine kreisförmige Warteschlangendatenstruktur zu implementieren.

Go-Sprachimplementierung der Methode der zirkulären Warteschlange:

// 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
}

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine kreisförmige Warteschlange in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn