如何查找循环队列中的元素数量

时间:2010-12-16 09:22:05

标签: queue circular-list

如何找到循环队列中的项目数?

|前 - 后|并不总是有效。

是否有一个等式来知道循环队列中有多少元素?

13 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

假设您使用大小为N的数组实现它,因此有指向前后的指针。使用以下公式:

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

答案 2 :(得分:1)

标准答案是在开始时使用两个迭代器,将第一个迭代器递增一次,将第二个迭代器递增两次。 检查它们是否指向同一个对象。然后重复,直到增加两次的那一次击中第一个或到达结尾。在这个循环中使用计数器来获取CQuueeue的长度

答案 3 :(得分:1)

假设您使用大小为N的数组进行队列实现,那么队列的大小就是

size= (N-front+rear) mod N

答案 4 :(得分:1)

循环队列中的项目没有,

size = (N-f+r) mod N

其中

  • N是以循环方式使用的数组的大小
  • f前元素的索引
  • r index紧接着后方元素

此公式适用于班轮和循环队列。

答案 5 :(得分:1)

没有公式考虑空(零)情况。这将为您提供队列中可用的空闲字节数:

FreeSpace = (printRdQue == printWrQue) ? PRINT_QUEUE_SIZE :
           (PRINT_QUEUE_SIZE - printWrQue + printRdQue) % PRINT_QUEUE_SIZE;

答案 6 :(得分:0)

您的队列可以在多个位置包含相同的元素吗?如果可以,那么我认为你不能这样做,因为没有办法知道它们之间的区别:

A-> B-&以及c

A-> B-> C-> A-> B-&以及c

如果它不能多次包含相同的元素,只需查看队列,直到找到您已经看过的元素

答案 7 :(得分:0)

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 ;
  }

答案 8 :(得分:0)

if(Cqueue_front> Cqueue_rear)             COUT<<"队列项的数量是:"<

答案 9 :(得分:0)

您需要实现循环队列什么?

答案:您将需要前后节点+项目列表+ count_items。

当然,只有在队列有限的情况下才这样讨论

动态分配会有所不同。

看看用C语言编写的示例

typedef struct
{

TYPE items[MAXSIZE];

TYPE front;

TYPE rear;

int count_items;

} QUEUE;

这将确保您队列中当前存在的确切物品数量。

要在队列中插入项目时,只需增加后方和count_items,当要从队列中删除项目时,只需减少后方和count_items。

答案 10 :(得分:0)

不。元素数=(后部+ MAX_SIZE-前部)%MAX_SIZE +1

答案 11 :(得分:0)

计算循环队列中元素数量的最简单方法是:

如果front > rear(即前面比后面靠前) 只需计算两者之间的空白数量即可

front - (rear+1)

否则为front < rear

rear - front + 1

如果需要,可以使用C程序

    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);
}
}

答案 12 :(得分:0)

假设您正在使用循环数组 A[0, n-1] 实现一个队列,其中第 (n-1) 个索引用于存储满/空条件,公式为:

元素数 = { 后-前 + 1 ,如果后==前

                 { rear-front + n , otherwise 

我们将在每次入队或出队时顺时针移动队列。