3、アレイシミュレーションリングキュー

実装のアイデア:

1)配列の最初の要素を指すようにキューヘッドフロント= 0を設定します。

2)配列の最後の次の要素を指すようにキューの末尾をリア= 0に設定し、フロント==リアキューを空にする

3)プログラムが満杯か空かをプログラムが理解しやすいように、キューの最初と最後にスペースを残します。キューがいっぱいの状態が(リア+ 1)%maxSizeであり、空の位置が常に変化していることを確認します

4)キューの有効なデータ計算式、リアフロント+ maxSize%maxSize(この場所はより抽象的です。円形の配列を描くと、グループが理解しやすくなります)

  1  システムの使用;
   2  
  3  名前空間データ構造
   4  {
   5      パブリック クラスCircleQueue
   6      {
   7          // キューの最大容量
  8          private  int maxSize;
   9          // キューの
先頭10          private  int front;
 11          // キューの終わり
12          private  int 後;
 13          / / キュー配列
14          private  int [] arrayQueue; 15          // キューの最後次の位置先頭と一致する場合、キューはいっぱいです
 16         // キューのテールになるよう空の位置は、キューが機能するよりよいので空であるかどうかが決定される
17。         公的 BOOL IsFull { GET =>(+リア1)maxSizeの%== フロント;}
 18は         、// 同時に同じ場所にヘッドとテールポイントが空であります
19          public  bool IsEmpty { get => front == Rear ;}
 20          // キューの残りのデータ
21          public  int Size { get =>(maxSize + Rear -front)%maxSize;}
 22  
23          public CircleQueue(int maxSize = 1 24          {
 25              //キューは空のままなので、最大値を
26              増やす必要がありますthis .maxSize = maxSize + 1 ;
 27              arrayQueue = new  int [ this .maxSize];
 28              // キューの先頭を
指す29              this .front = 0 ;
 30              // 3つのキューの先頭であるキューの最後の次の位置を
指す31              this .rear = 0 ;
 32          }
 33          // エントリ
34          public  bool AddQueue(int item)
 35          {
 36              if (IsFull)
 37             {
 38                  Console.WriteLine(" キューがいっぱいです... " );
 39                  return  false ;
 40              }
 41              arrayQueue [リア] = アイテム;
 42              // テールは次の位置を指します
43              リア=(リア+ 1)%this .maxSize 、
 44である             リターン trueに;
 45          }
 46である         // デキュー
47          公衆 INT getQueue()
 48          {
 49              IF (のisEmpty)
50              {
 51                  throw  new IndexOutOfRangeException("The queue is empty ... " );
 52  
53              }
 54              // 次の位置に移動する
55              var val = arrayQueue [front];
 56              front =(front + 1)%this .maxSize;
 57              return val;
 58          }
 59      }
 60  
61      public  class CircleQueueDemo
 62      {
 63          static  void Main(string [] args)
 64          {
 65              // 初期化キュー
66              var queue = new CircleQueue(9 );
 67              Console.WriteLine($ " 現在のキューの長さは{queue.Size} " );
 68              Console.WriteLine(" 長さは10エンキュー番号9 \ N- " ;)
 69              のためのINT I = 1 ; I <= 10、I ++は70              {
 71である 
72                  IF (queue.IsFull)
 73です                 {
74                      Console.Write(" キューがいっぱいです" 10 "チームに参加できませんでした、" );
 75                      ブレーク;
 76                  }
 77                  if (queue.AddQueue(i))
 78                  {
 79                      Console.Write($ " {i} \ t " ) ;
 80                  }
 81  
82              }
 83              Console.WriteLine($ " 現在のキューの長さは{queue.Size}です\ t " );
 84  
85              // ------------------- ---------------------------------------- 
86 
87              Console.WriteLine(" キュー内の5つの数値... \ n " );
 88              forint i = 1 ; i <= 5 ; i ++ 89              {
 90  
91                  Console.Write($ " {queue.GetQueue() } \ t " );
 92  
93              }
 94              Console.WriteLine($ " 現在のキューの長さは{queue.Size}です\ n " );
 95  
96              // ---------------- ------------------------------------------- 
97  
98             Console.WriteLine(" キューに10個の数値を挿入... \ n " );
 99              forint i = 1 ; i <= 10 ; i ++ 100              {
 101                  if (queue.IsFull)
 102                  {
 103                      Console.Write (" キューがいっぱいです。" 6 7 8 9 10 "チームに参加できませんでした" " ;
 104                      ブレーク;
 105                  }
 106                  if (queue.AddQueue(i))
 107                  {
 108                      Console.Write($ "} I {\ T " );
 109                  }
 110  
111              }
 112              Console.WriteLineを($ " 現在のキューの長さqueue.Size} {\ N- " );
 113  
114              // ----------------------- ----------------------------------------------- 
115  
1 16              コンソール.WriteLine($ " 現在のキューを印刷" );
 117              var size = queue.Size;
 118              forint i = 0 ; i <size; i ++ 119              {
 120                 Console.Write($ " {queue.GetQueue()} \ t " );
 121              }
 122              Console.WriteLine($ " 現在のキューの長さは{queue.Size} \ n " );
 123          }
 124      }
 125 }

 

おすすめ

転載: www.cnblogs.com/xiaojvhuang/p/12682225.html