#include<stdio.h>
#include<stdlib.h>
#define QSIZE 5 //Limit size of queue to just 5 enteries
/*Beginning of prototype for queue functions: Insert, retrieve and display*/
void qdisp(); //Display to queue array contents
void qinsert(); //Insert a element into rear of queue
int qdelete(); //Remove an element from front of queue
/*End of prototyping*/
// Variables
int fe=0,re=0,q[QSIZE],item; //fe(front entry), re(rear entry), q[](queue array), item(element to i/p or delete)
void main()
{
int choice;
while(1)
{
printf("1.Insert element\n2.Remove element\n3.Display element(s)\n4.Exit program\nEnter number for appropriate choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("Enter value of element: ");
scanf("%d",&item);
qinsert();
break;
case 2: item=qdelete();
printf("Removed \'%d\' from the queue\n",item);
break;
case 3: qdisp();
break;
case 4: exit(0);
/*case default : printf("Wrong choice i/p!");
break;*/
}
}
}
//End of main, beginning for function definitons
void qinsert()
{
if(re==QSIZE-1)
{
printf("Queue Overflow\n");
exit(0);
}
q[re]=item;
re++;
}
int qdelete()
{
if(fe>re)
{
printf("Queue is empty!\n");
exit(0);
}
item=q[fe];
fe++;
return item;
}
void qdisp()
{
int i; //i is loop counter variable
if(fe>re)
{
printf("Queue is empty!\n");
exit(0);
}
printf("Queue items are: \n");
for(i=fe;i<=re;i++)
printf("%d\n",q[i]);
}
我使用了初始的前置和后置条目为0,因为最初在队列中,任何先进入的条目也将成为最后一个条目。然而,我的老师说我应该保持后面的条目为'-1',当插入一个元素到队列中时,首先增加后面的条目索引,然后添加,反对我的代码先添加后增加。我在网上查了一下,直到现在我也不知道我怎么错了。
如果我错了或者我的老师错了,请给我提供信息?
预递增和后递增都可以在队列中使用。然而,变化的是满和空的条件。在预增量中,完整条件是qsize-1
,在后增量中,完整条件是qsize
。对于预增量,空条件是fe==re
,对于后增量fe>re
。
使用pre-increment可以在delete中保存临时变量。注意必须如何将当前元素保存到item,然后递增索引,然后返回item。
item=q[fe];
fe++;
return item;
您可以通过增加索引,然后返回元素来取消item
变量。
fe++;
return q[fe];
我正在从Sahni的“C语言数据结构基础”中学习数据结构。在使用动态数组的循环队列中,作者提到了以下几点, 假设capacity是循环队列的初始容量,我们必须首先使用realloc增加数组的大小,这将把最大容量元素复制到新的数组中。为了获得正确的循环队列配置,我们必须将右段中的元素(即元素a和B)滑动到数组的右端(参见图3.7.d)。数组加倍和向右滑动一起最多复制2*容量-2个元素。
我很困惑为什么我的队列不工作,我相信排队和退队方法中存在问题。但是我不确定,我应该实现初始数组大小设置为8的类。一旦元素数量超过该大小,数组大小将加倍。从数组开头移除元素后,需要将数组中的所有元素向左移动一个位置。编写一个测试程序,将从1到20的20个数字添加到队列中,然后删除这些数字并显示它们。这是我的密码 这里是测试类。
我想通过数组的第二个元素[0,30],[5,10],[15,20]进行比较。 但我得到一个错误如下 第8行:错误:需要数组,但找到了对象PriorityQueue ^2个错误
这是一道古老的考题。 在什么条件下(V, E),我们应该实现的Prim的算法使用数组(索引的顶点)而不是堆(与对数时间实现的提取最小和减少关键操作)的最小优先级队列? 在什么条件下(V,E),我们应该使用有序数组实现Prim算法的最小优先级队列?
假设我有一个大小为[10]的数组,当该数组被填满时,我想实现一个FIFO结构,而不是它只是填满了,因此无法向数组中添加新的东西,并抛出旧的东西。 例如,如果我有一个包含汽车制造商的字符串数组,当我的数组中有10个制造商时,我希望删除最旧的条目,添加最新的条目,但要考虑kepping FIFO。我如何在这样的方法中实现它:
我们的环境由3个jboss服务器组成(门户、jms、协调)。 协调服务器托管骆驼路由,该路由具有消耗自队列(SLAQueue)的路由 JMS服务器托管了我们的所有队列 最近,我们发现了一个错误,即托管在JMS服务器上的TaskQueue中的一些消息没有传递到门户服务器上的MDB。由于某些原因,它们被卡住了,当我们重新启动JMS服务器时,卡住的消息被传递 为了进行调查,我们在“org.apache.