7

循環キュー内のアイテム数を確認するにはどうすればよいですか? |フロント - リア| 常に機能するとは限りません。

配列のフロント、リア、およびサイズを使用して、循環キューに要素がいくつあるかを知るための1つの式はありますか?

4

15 に答える 15

8

実際のサイズは

size = front > rear ? (MAX - front + rear + 1) : (rear - front + 1);

または、一般的な式を使用できます。

size = abs(abs(MAX - front) - abs(MAX -rear));//this works in every situation
于 2011-11-06T12:06:19.587 に答える
3

サイズの配列を使用して実装すると仮定するとN、前後を指すポインターがあります。次の式を使用します。

size = front > rear ? (front - rear) : (front+N -  rear);
于 2010-12-16T09:33:59.327 に答える
3
 Pointer1 = head; // (your node)
 count = 0;


 if( Pointer1 != NULL )
 {
   count = 1;
   Pointer2 = Pointer1->Next;
   while ( Pointer2 != NULL && Pointer2 != Pointer1 )
   {
     count++;
     Pointer2 = Pointer2->Next;
   }
 }

 return count;
于 2010-12-16T23:58:19.987 に答える
2

キューの実装にサイズ N の配列を使用していると仮定すると、キューのサイズは になります size = (N-front + rear) mod N

于 2012-08-08T13:23:39.307 に答える
1

標準的な答えは、最初に 2 つのイテレータを取り、最初のイテレータを 1 回インクリメントし、2 番目のイテレータを 2 回インクリメントすることです。それらが同じオブジェクトを指しているかどうかを確認してください。次に、2 回インクリメントしているものが最初のものに当たるか、最後に到達するまで繰り返します。このループ内では、カウンターを使用して CQueueeue の長さを取得します

于 2011-01-27T08:36:57.710 に答える
1

どの数式も、空の (ゼロ) ケースを考慮していません。これにより、キューで使用可能な空きバイト数が得られます。

FreeSpace = (printRdQue == printWrQue) ? PRINT_QUEUE_SIZE :
           (PRINT_QUEUE_SIZE - printWrQue + printRdQue) % PRINT_QUEUE_SIZE;
于 2014-08-27T12:45:32.310 に答える
0

サーキュラー キューのアイテム数は、

size = (N-f+r) mod N

どこ

  • N は循環方式で使用される配列のサイズです
  • 前要素のf指数
  • 後部要素の直後の r インデックス

この式は、ライナー キューと循環キューの両方で機能します。

于 2012-11-20T15:55:39.297 に答える
0

キューの複数の場所に同じ要素を含めることができますか? できる場合は、次の違いを知る方法がないため、これを行うことはできないと思います。

a->b->c

a->b->c->a->b->c

同じ要素を複数回含めることができない場合は、既に見た要素が見つかるまでキューを調べてください

于 2010-12-16T09:27:51.297 に答える
0

if (Cqueue_front>Cqueue_rear) cout<<" キュー項目の数: "<

于 2017-11-07T17:45:05.103 に答える
0

循環キュー内の要素数をカウントする最も簡単な方法は次のとおりです。

if front > rear(つまり、前部が後部よりも進んでいる場合) 間にある空きスペースの数を数えるだけです

front - (rear+1)

それ以外の場合front < rear:

rear - front + 1

必要な場合は AC プログラム:

    int find_ele(int total,int front,int rear){
         if(rear < front ) {  \\1st case
int res =    front - rear + 1;
return (total-res);}

else{
      return (rear - front + 1);
}
}
于 2020-09-30T05:31:33.833 に答える