循環キュー内のアイテム数を確認するにはどうすればよいですか? |フロント - リア| 常に機能するとは限りません。
配列のフロント、リア、およびサイズを使用して、循環キューに要素がいくつあるかを知るための1つの式はありますか?
循環キュー内のアイテム数を確認するにはどうすればよいですか? |フロント - リア| 常に機能するとは限りません。
配列のフロント、リア、およびサイズを使用して、循環キューに要素がいくつあるかを知るための1つの式はありますか?
実際のサイズは
size = front > rear ? (MAX - front + rear + 1) : (rear - front + 1);
または、一般的な式を使用できます。
size = abs(abs(MAX - front) - abs(MAX -rear));//this works in every situation
サイズの配列を使用して実装すると仮定するとN
、前後を指すポインターがあります。次の式を使用します。
size = front > rear ? (front - rear) : (front+N - rear);
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;
キューの実装にサイズ N の配列を使用していると仮定すると、キューのサイズは になります
size = (N-front + rear) mod N
。
標準的な答えは、最初に 2 つのイテレータを取り、最初のイテレータを 1 回インクリメントし、2 番目のイテレータを 2 回インクリメントすることです。それらが同じオブジェクトを指しているかどうかを確認してください。次に、2 回インクリメントしているものが最初のものに当たるか、最後に到達するまで繰り返します。このループ内では、カウンターを使用して CQueueeue の長さを取得します
どの数式も、空の (ゼロ) ケースを考慮していません。これにより、キューで使用可能な空きバイト数が得られます。
FreeSpace = (printRdQue == printWrQue) ? PRINT_QUEUE_SIZE :
(PRINT_QUEUE_SIZE - printWrQue + printRdQue) % PRINT_QUEUE_SIZE;
サーキュラー キューのアイテム数は、
size = (N-f+r) mod N
どこ
この式は、ライナー キューと循環キューの両方で機能します。
キューの複数の場所に同じ要素を含めることができますか? できる場合は、次の違いを知る方法がないため、これを行うことはできないと思います。
a->b->c
と
a->b->c->a->b->c
同じ要素を複数回含めることができない場合は、既に見た要素が見つかるまでキューを調べてください
if (Cqueue_front>Cqueue_rear) cout<<" キュー項目の数: "<
循環キュー内の要素数をカウントする最も簡単な方法は次のとおりです。
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);
}
}