如何找到循环队列中的项目数?|前-后| 并不总是有效。
是否有一个公式可以知道使用数组的前后和大小的循环队列中有多少元素?
实际上尺寸是,
size = front > rear ? (MAX - front + rear + 1) : (rear - front + 1);
或者可以使用通用公式:
size = abs(abs(MAX - front) - abs(MAX -rear));//this works in every situation
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 = front > rear ? (front - rear) : (front+N - rear);
假设您使用大小为 N 的数组进行队列实现,那么队列的大小将为
size = (N-front + rear) mod N
.
标准答案是在开始时采用两个迭代器,第一个递增一次,第二个递增两次。检查它们是否指向同一个对象。然后重复直到增加两次的那个到达第一个或到达末尾。在这个循环中使用计数器来获取 CQuueeue 的长度
没有一个公式考虑空(零)情况。这将为您提供队列中可用的空闲字节数:
FreeSpace = (printRdQue == printWrQue) ? PRINT_QUEUE_SIZE :
(PRINT_QUEUE_SIZE - printWrQue + printRdQue) % PRINT_QUEUE_SIZE;
您的队列可以在多个位置包含相同的元素吗?如果可以,那么我认为您不能这样做,因为无法知道以下两者之间的区别:
a->b->c
和
a->b->c->a->b->c
如果它不能多次包含相同的元素,只需查看队列,直到找到您已经看过的元素
循环队列中的项目数量为,
size = (N-f+r) mod N
在哪里
此公式适用于线性队列和循环队列。
实现循环队列需要什么?
答:您将需要前后节点 + 项目列表 + count_items。
当然只有在队列有限的情况下才这样实现,当谈到
动态分配就不同了。
看一个 C 语言中的例子,
typedef struct
{
TYPE items[MAXSIZE];
TYPE front;
TYPE rear;
int count_items;
} QUEUE;
这将确保您当前存在于队列中的项目的确切数量。
当你想向队列中插入一个项目时,你将简单地增加rear和count_items,当你想从队列中删除一个项目时,你只需减少rear和count_items。
if (Cqueue_front>Cqueue_rear) cout<<" 队列项数为:"<
计算循环队列中元素数量的最简单方法是:
如果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);
}
}
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 ;
}
number of elements = ((array_size - front + rear) MOD queue_size) + 1
假设front和rear保存了数组中前后元素的索引
不。元素数 = (后 + MAX_SIZE - 前) % MAX_SIZE + 1
假设您正在使用循环数组 A[0, n-1] 实现队列,其中第 (n-1) 个索引用于存储满/空条件,公式为:
元素数 = { 后前 + 1 ,如果后==前
{ rear-front + n , otherwise
我们将在每个入队或出队时顺时针移动队列。