/ ** *円形キュー
・キュー要素のキューポインタに直接配置された第1ヘッド、キューの最後の要素の末尾へのポインタ、すなわち、キュー内の予約領域が常に * / クラス CircleQueueが実装キュー<整数> { プライベート整数[] queueArray = NULL ; プライベート int型まず、 プライベート int型の尾; プライベート int型maxSizeの、 公共 CircleQueue(int型MAX){ この .maxSize + =最大1。; この .queueArray = 新しい新しい整数【maxSizeの]; } @Override 公共 int型のサイズ(){ リターン(テール第一+ maxSizeの)%maxSizeの。 } @Override パブリック ブールのisEmpty(){ 戻り尾== まず、 } @Override パブリック ブール含有(オブジェクトo){ 整数整数 = O(整数)。 以下のため(intは I ++; I =尾!私は最初= {) の場合(I == queueArray.length){ 私は = 0 ; } 場合(integer.equalsは(queueArray [I])){ 戻り 真。 } } を返す 偽。 } @Override 公共イテレータ<整数> 反復子(){ 戻り 新しいイテレータ<整数> (){ int型 temFirst = 最初; @Override パブリック ブールのhasNext(){ リターン!テール= temFirst。 } @Override 公共整数次(){ int型 NUM = queueArray [temFirst]。 temFirst =(temFirst + 1)%maxSizeの; 戻り値のNUM; } }。 } @Override パブリック ブール追加(整数整数){ もし、((尾+ 1)%maxSizeの== 最初の){ するSystem.out.println( "队列已满、无法添加" )。 リターン はfalse ; } queueArray [尾] = 整数。 尾 =(尾+ 1)%maxSizeの。 返す 真; } @Override パブリック整数ポール(){ 場合(のisEmpty()){ スロー 新しいのRuntimeExceptionを( "队列为空" ); } int型の結果= queueArray [第]。 第 =(第一+ 1)%maxSizeの。 返す最初; } @Override パブリック整数PEEK(){ 戻りqueueArrayを[第]。 } }
パブリック 静的 ボイドメイン(文字列[]引数){ CircleQueue circleQueue = 新しい新しい CircleQueue(5。 )、 スキャナスキャナ = 新しい新しいスキャナ(System.in); 一方、(真の){ するSystem.out.println( "1:添加元素" )。 System.out.println( "2:要素を削除" ) のSystem.out.println( "3:ビューヘッダー要素。" ); のSystem.out.println( "4:トラバースキュー" ) するSystem.out.println( " 5:表示要素の数" ) のSystem.out.println( " 6:それは空です。」); INT称賛= scanner.nextInt()。 スイッチ(称賛){ ケース 1 :{ するSystem.out.println( "请输出一个元素" )。 INT NUM = scanner.nextInt()。 circleQueue.add(NUM)。 休憩; } ケース 2 :{ するSystem.out.println(circleQueue.poll())。 休憩; } ケース 3 :{ するSystem.out.println(circleQueue.peek())。休憩; } ケース 4 :{ ための(整数整数:circleQueue){ System.out.printf( "%D \ T" 、整数)。 } のSystem.out.println(); 休憩; } ケース 5 :{ するSystem.out.println(circleQueue.size())。休憩; } ケース 6 :{ するSystem.out.println(circleQueue.isEmpty())。 休憩; } } } }