如何找到循环队列中的项目数?
|前 - 后|并不总是有效。
是否有一个等式来知道循环队列中有多少元素?
答案 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
其中
此公式适用于班轮和循环队列。
答案 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
我们将在每次入队或出队时顺时针移动队列。