gpt4 book ai didi

使用数组的循环队列操作

转载 作者:行者123 更新时间:2023-11-30 14:55:07 25 4
gpt4 key购买 nike

Code shows basic operations on Circular Queue.

#define maxsize 10
typedef struct queue
{
int data[maxsize];
int f,r;
}myQueue;
myQueue q;

void init(myQueue *q);
int full(myQueue *q);
int empty(myQueue *q);
void enqueue(myQueue *q,int num);
void dequeue(myQueue *q);
void print(myQueue *q);

void main()
{
init(&q);
int op;
do
{
printf("\nCircular queue operations: Press:\n");
printf("1 for enqueue\n");
printf("2 for dequeue\n");
printf("3 to print Circular Queue\n");

int num,choice;
printf("\nEnter choice:\n");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("Enter number to insert :\n");
scanf("%d",&num);
if(full(&q))
{
printf("\nQueue is full\n");
exit(0);
}
enqueue(&q,num);
break;
case 2: if(empty(&q))
{
printf("\nQueue is empty\n");
exit(0);
}
dequeue(&q);
break;
case 3: printf("Printing current queue: \n");
print(&q);
break;
default:break;
}
printf("Press 1 to continue or 0 to exit:\n");
scanf("%d",&op);
}
while(op);
}

void init(myQueue *q)
{
q->f=-1;
q->r=-1;
}

int full(myQueue *q)
{
if((q->r+1)%maxsize==q->f)
{
return 1;
}
else
return 0;
}

int empty(myQueue *q)
{
if(q->r==-1)
{
return 1;
}
else
return 0;
}

enqueue function is used to add the elements into queue.

void enqueue(myQueue *q,int num)
{
if(empty(&q))
{
q->f=0;
q->r=0;
}
else
{
q->r=(q->r+1)%maxsize;
}
q->data[q->r]=num;
printf("\n%d is enqueued\n",q->data[q->r]);
}

Dequeue function is used to delete elements from the stack.

void dequeue(myQueue *q)
{
int del_num;
del_num=q->data[q->f];
if(q->f==q->r)
{
init(&q);
}
else
{ //To move front to the next position in the circular array.
q->f=(q->f+1)%maxsize;
}
printf("\n%d is dequeued\n",del_num);
}

void print(myQueue *q)
{
int i;
for(i=q->f;i!=q->r;i=(i+1)%maxsize)
{
printf("%d\n",q->data[i]);
}
printf("%d\n",q->data[q->r]);
}

Issue: Circular queue is automatically enqueuing the 0 element in it initially.However, rest of the operations are working just fine.

I am not able to identify, why it is automatically inserting 0 in the circular queue, without me enqueuing it.

最佳答案

您的 print() 函数始终将 q->data[q->r] 打印为最后一个操作。当您的队列为空时,这毫无意义。也许你可以这样避免它:

void print(myQueue *q)
{
if (empty(q))
return;

int i;
for(i=q->f;i!=q->r;i=(i+1)%maxsize)
{
printf("%d\n",q->data[i]);
}
printf("%d\n",q->data[q->r]);
}

无论如何,您的代码还有很多问题,我怀疑它是否可以正确编译。举个例子,函数 enqueue() 接收一个 myQueue* 类型的参数。然后它提供了空函数及其地址,但这是错误的。您必须将指针本身传递给函数,因此使用 q 而不是 &q。同样的错误一次又一次地重复。

关于使用数组的循环队列操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46201220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com