キューデータ構造の環状golang

ディレクトリ構造:

circlequeue.go

キューパッケージ

のインポート(
    エラー
    FMT 

// CircleQueueリングキュー 
型CircleQueueの構造体{ 
    MaxSizeのは、int型
    配列を[ 5 ] INT 
    フロント    int型
    リア     intは
} 

// プッシュキューに値を追加する 
(FUNC(Q * CircleQueue)プッシュヴァルのINT )(ERRエラー){
     // 最初のキューが満杯であるか否かを判断
    のiF q.IsFull(){
         リターン errors.New(" キュー満杯" 
    } 
    q.Array [q.Rear]= ヴァル
     // 尾部に要素が含まれていない
     // q.Rear ++ 
    q.Rear =(+ q.Rear。1)%q.MaxSizeの
    リターン
} 

// ポップ値取得 
FUNC(Q * CircleQueue)ポップ()(ヴァルのINTを、誤差ERR){
     IF q.IsEmpty(){
         リターン - 。1、errors.Newは(" 空のキュー" 
    } 
    // 要素を含むキューの先頭を 
    ヴァル= q.Array [q.Front]
     @ q.Front ++ 
    q.Front =(+ q.Front。1)%q.MaxSize
    リターンvalは、ERR 
} 

// IsFullキューが満杯である 
FUNC(* Q CircleQueue)IsFull( )BOOL {
     リターン (+ q.Rear 1)==%q.MaxSize q.Front 
} 

// のisEmptyキューが空である 
FUNC(Q * CircleQueue)のisEmpty()BOOL {
     戻り q.Front == q.Rear 
} 

// サイズキューサイズ 
FUNC(Q * CircleQueue)サイズ()のint {
     リターン (q.Rear q.MaxSize + - q.Front)%q.MaxSize 
} 

// 表示する表示キュー 
FUNC(Q * CircleQueue)ショー(){
     / / キュー内の要素の現在の数を削除 
    サイズ:= q.Size()
     IFサイズ== 0 { 
        fmt.Println("キューが空である" 
    } 
    // 補助変数はフロントポイント 
    := tmpFront q.Frontの
     ための I:= 0 ; I <サイズ; I ++ { 
        fmt.Printf(" キュー[D%]%= V \ T " 、tmpFront、 q.Array [tmpFront])
         tmpFront =(+ tmpFront。1)%q.MaxSize 
    } 

}

main.go

メインパッケージ

のインポート(
    " FMT " 
    " go_code / data_structure /キュー" 
    " OS " 

FUNCメイン(){ 

    VARキー文字列の
    VARヴァルINT 
    Q: =&queue.CircleQueue { 
        のMaxSize:5 
        フロント:    0 
        リア:     0 
    } 
    以下のために{ 
        fmt.Println(" ------------------------------ " 
        fmt.Println(1.プッシュ入力が追加表さキューへのデータ。 "
        Fmt.Println(入力キューから2ポップ取り出しデータ
        fmt.Println(3.ショー番組表示キューを入力
        fmt.Println(4.終了するために、終了を入力
        fmt.Println(" ------------------------------ " 
        fmt.Scanln( キー)
         スイッチキー{
         ケース " プッシュ
            fmt.Println (" 追加する値を入力してください:" 
            fmt.Scanln( ヴァル)
            ERR:=q.Push(ヴァル)
             IF ERR =!nilの{ 
                fmt.Println(ERR)
            } { 
                fmt.Println(" 成功の追加" 
                fmt.Println(" リア:" 、q.Rear)
            } 
        ケース " POPの" 
            ヴァル、ERR: = q.Pop()
             IF ERR =!nilの{ 
                fmt.Println(ERR)
            } { 
                fmt.Println(" 値を取得します:"、ヴァル)
                fmt.Println(" フロント:" 、q.Front)
            } 

        場合 、 " ショー" 
            q.Show()
            fmt.Println()
        場合 、 " 出口" 
            os.Exit(0 
        } 
    } 
}

注円形キューの中核である赤いマーク、。

おすすめ

転載: www.cnblogs.com/xiximayou/p/12010938.html