C++ 用于显示循环双端队列的函数
我试图显示循环双端队列。当我的指针位于第0个位置时,当我在前面插入一个元素时,问题就出现了。当指针位于第(SIZE-1)个位置时,SIZE是定义的最大值。我不能为它申请循环,所以我使用了下面代码中给出的if-else条件ass:`C++ 用于显示循环双端队列的函数,c++,C++,我试图显示循环双端队列。当我的指针位于第0个位置时,当我在前面插入一个元素时,问题就出现了。当指针位于第(SIZE-1)个位置时,SIZE是定义的最大值。我不能为它申请循环,所以我使用了下面代码中给出的if-else条件ass:` void display(struct Q*q) { int i ; if(q->front <= q->rear) { for(i = q->front; i<= q->rear; i
void display(struct Q*q)
{
int i ;
if(q->front <= q->rear)
{
for(i = q->front; i<= q->rear; i= (i+1)%size)
cout<<q->data[i]<<" ";
}
else
{
for(i = q->front; i<= size; i++)
cout<<q->data[i]<<" ";
i=0;
for(i = 0; i<= q->rear;i++)
cout<<q->data[i]<<" ";
}
}
每次我在队列前面插入10时,9就会递减
例如:
等等。如何在此函数中删除该计数器?我只希望我的输出是:
10 10 10 10
编辑
OP在评论中添加了以下信息:
struct Q
{
int data[size];
int front = -1;
int rear = -1;
};
根据OP在注释中给出的信息,似乎使用了
-1
将队列标记为空
因此,显示功能可以写为:
void display(struct Q*q)
{
if(q->front < 0 || q->rear < 0)
{
cout << "Queue empty" << endl;
return;
}
// Check that front and rear are in valid range
assert(q->front < size);
assert(q->rear < size);
int tmp = q->front;
while(tmp != q->rear)
{
cout << q->data[tmp] << " ";
tmp = (tmp + 1) % size;
}
cout << q->data[tmp] << " ";
}
void显示(结构Q*Q)
{
如果(q->前<0 | q->后<0)
{
cout后方<尺寸);
int tmp=q->前;
同时(tmp!=q->后)
{
cout data[tmp]欢迎来到堆栈溢出。请阅读、获取、阅读以及。最后学习如何创建。您能给我们展示一下结构Q
的定义吗?“如何删除此程序中的计数器”-在什么程序中?我看到一个函数正在使用一些未知结构。最好在调试程序中逐步检查代码以消除您对问题的怀疑后,使用mcve进行更新display
功能可能只需一个循环即可实现,但缺少的代码太多,因此编写答案需要进行大量猜测。此外,您也写了很多关于“插入”的内容,但此处没有发布插入代码。OT:ii
i猜测
struct Q
{
int data[size];
int front = -1;
int rear = -1;
};
void display(struct Q*q)
{
if(q->front < 0 || q->rear < 0)
{
cout << "Queue empty" << endl;
return;
}
// Check that front and rear are in valid range
assert(q->front < size);
assert(q->rear < size);
int tmp = q->front;
while(tmp != q->rear)
{
cout << q->data[tmp] << " ";
tmp = (tmp + 1) % size;
}
cout << q->data[tmp] << " ";
}