как найти количество элементов в круговой очереди - PullRequest
4 голосов
/ 16 декабря 2010

как узнать количество элементов в круговой очереди?

| front - back |не всегда работает.

есть ли одно уравнение, чтобы узнать, сколько элементов находится в круговой очереди?

Ответы [ 11 ]

8 голосов
/ 06 ноября 2011

на самом деле размер будет,

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

или можно выбрать общую формулу:

size = abs(abs(MAX - front) - abs(MAX -rear));//this works in every situation
3 голосов
/ 17 декабря 2010
 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;
2 голосов
/ 08 августа 2012

Если вы используете массив размера N для реализации очереди, то размер очереди будет </p> <p>size= (N-front+rear) mod N

1 голос
/ 27 августа 2014

Ни одна из формул не учитывает пустой (нулевой) случай. Это даст вам количество свободных байтов, доступных в очереди:

FreeSpace = (printRdQue == printWrQue) ? PRINT_QUEUE_SIZE :
           (PRINT_QUEUE_SIZE - printWrQue + printRdQue) % PRINT_QUEUE_SIZE;
1 голос
/ 20 ноября 2012

Нет элементов в круговой очереди,

size = (N-f+r) mod N

где

  • N - размер массива, используемого круговым способом
  • f индекс переднего элемента
  • r индекс сразу за задним элементом

Эта формула работает как для линейных, так и для кольцевых очередей.

1 голос
/ 27 января 2011

Стандартный ответ состоит в том, чтобы взять два итератора в начале, увеличить первый один раз, а второй - дважды.Проверьте, указывают ли они на один и тот же объект.Затем повторяйте, пока тот, который увеличивается вдвое, не достигнет первого или не достигнет конца.внутри этого цикла используйте счетчик, чтобы получить длину CQuueeue

1 голос
/ 16 декабря 2010

Предполагается, что вы реализуете его с использованием массива размером N, поэтому указатели направлены вперед и назад.Используйте следующую формулу:

size = front > rear ? (front - rear) : (front+N -  rear);
0 голосов
/ 17 декабря 2018

Что нужно для реализации циклической очереди?

Ответ: вам понадобятся передний и задний узлы + список элементов + count_items.

Конечно, это реализуется только тогда, когдаочередь конечна, когда речь идет о

динамическом выделении, она будет другой.

Взгляните на пример на языке C,

typedef struct
{

TYPE items[MAXSIZE];

TYPE front;

TYPE rear;

int count_items;

} QUEUE;

Это поможет вамТочное количество элементов в настоящее время существует в очереди.

Когда вы хотите вставить элемент в очередь, вы просто увеличите Rear и Count_items, а когда вы хотите удалить элемент из очереди, выбудет просто уменьшать тыл и count_items.

0 голосов
/ 07 ноября 2017

if (Cqueue_front> Cqueue_rear) cout << "Количество элементов очереди:" <

0 голосов
/ 22 апреля 2017
int lenghtQueue(queue* q){

     int len =0 ;
     if (isEmpty(q))
            return 0 ;

      queue* qe = q->next ;
      len ++ ;

       while(qe!=q){
             len ++ ;
             qe=qe->next ;           
       }
           return len ;
  }
...