ホームページ  >  記事  >  バックエンド開発  >  Golang はキューイングを実装します

Golang はキューイングを実装します

WBOY
WBOYオリジナル
2023-05-19 10:29:37562ブラウズ

現代社会では、切符を買うために並ぶ、治療のために並ぶ、交通機関のために並ぶなど、さまざまな問題を解決するために人々はますます並ぶ必要があります。キューイングを実現する方法の 1 つは、コンピューター技術を使用することです。

コンピュータの分野では、Go (Golang とも呼ばれる) と呼ばれるプログラミング言語があります。これは Google によって開発された最新のプログラミング言語であり、高性能な分散システムの開発に広く使用されています。この記事ではGolangを使ってキューイングを実装する方法を紹介します。

最初に明確にしておきたいのは、キューイングは典型的なデータ構造アプリケーション シナリオであるため、Golang でキューを使用してキューイングを実装できるということです。キューは先入れ先出しのデータ構造であり、キュー モデルによく似ています。

Golang では、組み込みコンテナ パッケージ内のリストを使用してキューを実装できます。具体的な実装方法は次のとおりです:

  1. 最初にキュー構造を定義します:
type Queue struct {
    list *list.List
}
  1. 次に、キューを初期化し、新しいリストを作成する必要があります。キュー タイプのインスタンスを返します:
func New() *Queue {
    return &Queue{
        list: list.New(),
    }
}
  1. キューに要素を追加する必要があります。キューの Push メソッドを使用できます:
func (q *Queue) Push(v interface{}) {
    q.list.PushBack(v)
}
  1. キュー内 要素をデキューするには、キューの Pop メソッドを使用する必要があります。
func (q *Queue) Pop() interface{} {
    e := q.list.Front()
    if e != nil {
        q.list.Remove(e)
        return e.Value
    }
    return nil
}

上記は、Golang でリストを使用してキューを実装する方法です。

次に、キューを使用してキュー システムを実装します。キューイング システムでは、次の点を実装する必要があります。

  1. キュー内の各要素は、キューに参加している個人を表し、各個人の情報 (番号、番号など) を記録する必要があります。待ち時間など
  2. 個人は、先着順や優先順位などの特定のルールに従って列に入る必要があります。
  3. キュー内の個人の数が特定のレベルに達すると、システムは、キューに入った最初の個人を削除するなど、特定のルールに従ってキューから個人を削除する必要があります。
  4. 個人が取り出された場合は、列から外し、待ち時間、サービス時間、その他の情報を記録する必要があります。

上記の要件に基づいて、各個人の情報を記録するための Person 構造を定義できます。

type Person struct {
    id int       // 编号
    waitTime int // 等待时间
    serveTime int // 服务时间
}

次に、キュー機能を実装するための Queue 構造を定義できます。

type Queue struct {
    list *list.List // 存储每个个体
}

func NewQueue() *Queue {
    return &Queue{
        list: list.New(),
    }
}

func (q *Queue) Push(p *Person) {
    q.list.PushBack(p)
}

func (q *Queue) Pop() *Person {
    e := q.list.Front()
    if e != nil {
        q.list.Remove(e)
        return e.Value.(*Person)
    }
    return nil
}

func (q *Queue) Len() int {
    return q.list.Len()
}

上記のコードは、キューを使用してキュー機能を実装する方法を示しています。プログラム内でこの Queue 構造を使用して、キュー システムのキューを表すことができます。

Queue 構造を使用してキュー システムを実装する方法を示す簡単な例を実装できます:

package main

import (
    "fmt"
    "time"
)

type Person struct {
    id int       // 编号
    waitTime int // 等待时间
    serveTime int // 服务时间
}

func NewPerson(id int) *Person {
    return &Person{
        id: id,
    }
}

func main() {
    q := NewQueue()

    // 模拟10个人排队
    for i := 1; i <= 10; i++ {
        p := NewPerson(i)
        q.Push(p)
    }

    // 每秒钟服务一个人,直到队列为空
    for q.Len() > 0 {
        time.Sleep(time.Second)
        p := q.Pop()
        if p != nil {
            p.waitTime += 1
            p.serveTime += 1
            fmt.Printf("编号%d的人被服务,等待%d秒,已服务%d秒
", p.id, p.waitTime, p.serveTime)
        }
    }
}

上記のコードは、10 人のキューイングをシミュレートする単純なキュー システムを示しています。キューが空になるまで、1 秒あたり 1 人にサービスを提供します。

この記事では、Golang を使用してキューイングを実装する方法を紹介します。キュー システムを実装する場合、キューを使用して個人を保存したり、特定のルールに従ってキューに個人を追加したり、キューから個人を削除したり、個人情報を記録したりできます。 Golang の list パッケージを使用すると、キュー機能を簡単に実装できます。

以上がGolang はキューイングを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。