Home >Backend Development >Golang >Learn how to design and operate circular queues with Go language

Learn how to design and operate circular queues with Go language

王林
王林Original
2024-03-24 22:45:03668browse

Learn how to design and operate circular queues with Go language

Designing and manipulating circular queues is a common problem in data structures, and learning this concept by writing code in Go will help you understand how circular queues work and how to implement them. . In this article, we will delve into the concept of circular queues and concrete examples of writing circular queues in Go language. First, let's understand the definition and operation of circular queue.

The definition and operation of circular queue

The circular queue is a ring-shaped queue data structure. Its basic feature is that the head and tail of the queue are logically connected. When the end of the queue reaches the end of the array, if there is still space at the head of the queue, this space can be used to form a loop.

Common operations of circular queues include:

  1. Enqueue: Insert elements to the end of the queue.
  2. Dequeue: Remove elements from the head of the queue.
  3. Determine whether the queue is empty.
  4. Determine whether the queue is full.

Use Go language to implement circular queue

The following is a code example to use Go language to implement circular queue:

package main

import "fmt"

type MyCircularQueue struct {
    data []int
    size int
    front int
    rear int
}

func Constructor(k int) MyCircularQueue {
    return MyCircularQueue{
        data: make([]int, k),
        size: k,
        front: 0,
        rear: 0,
    }
}

func (this *MyCircularQueue) EnQueue(value int) bool {
    if this.IsFull() {
        return false
    }
    this.data[this.rear] = value
    this.rear = (this.rear + 1) % this.size
    return true
}

func (this *MyCircularQueue) DeQueue() bool {
    if this.IsEmpty() {
        return false
    }
    this.front = (this.front + 1) % this.size
    return true
}

func (this *MyCircularQueue) Front() int {
    if this.IsEmpty() {
        return -1
    }
    return this.data[this.front]
}

func (this *MyCircularQueue) Rear() int {
    if this.IsEmpty() {
        return -1
    }
    return this.data[(this.rear - 1 + this.size) % this.size]
}

func (this *MyCircularQueue) IsEmpty() bool {
    return this.front == this.rear
}

func (this *MyCircularQueue) IsFull() bool {
    return (this.rear + 1) % this.size == this.front
}

func main() {
    obj := Constructor(3)
    fmt.Println(obj.EnQueue(1)) // true
    fmt.Println(obj.EnQueue(2)) // true
    fmt.Println(obj.EnQueue(3)) // true
    fmt.Println(obj.EnQueue(4)) // false
    fmt.Println(obj.Rear()) // 3
    fmt.Println(obj.IsFull()) // true
    fmt.Println(obj.DeQueue()) // true
    fmt.Println(obj.EnQueue(4)) // true
    fmt.Println(obj.Rear()) // 4
}

In this code, we define a MyCircularQueueStructure, which contains the data and operation methods of the circular queue. Initialize the circular queue through the constructor Constructor, and then implement methods such as entering the queue, dequeuing the queue, and determining whether the queue is empty and whether the queue is full.

Through this example, we can clearly understand how to design and operate circular queues using Go language, and have an in-depth understanding of the implementation principles of circular queues. I hope this article will be helpful to everyone in learning circular queues and Go language programming.

The above is the detailed content of Learn how to design and operate circular queues with Go language. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn