ディレクトリ構造:
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 ) } } }
注円形キューの中核である赤いマーク、。