gpt4 book ai didi

c - 循环队列中的数组未初始化

转载 作者:行者123 更新时间:2023-11-30 15:49:51 25 4
gpt4 key购买 nike

我在循环队列的 C 实现中遇到问题。入队操作无法正常工作。该值未在数组中初始化。

队列的结构是:

typedef struct
{
int a[5];
int tail;
int head;
int cap;
}Que;

入队函数:

    int enque(Que *q,int num) 
{
if((q->head)==(q->tail ))
return -1;
if(q->head==-1)
q->head=0;
q->a[q->tail]=num;
(q->tail) ++;
if(q->tail ==q->cap)
q->tail=0;
return 0;
}

出列函数:

    int deque(Que *q)
{
if((q->head)==-1)
return -1;

int b= q->a[q->head];
(q->head)++;
if(q->head==q->cap)
q->head=0;
if(q->head==q->tail)
q->head=-1;

return b;
}

head 是要出队的索引位置,tail 是要添加元素的索引。head 的初始值为 -1 , tail 为 0 , cap 为 5 。这些值已由另一个函数设置。

@Klas Lindbäck完整代码如下:

#include <stdlib.h>
#include <stdio.h>
typedef struct
{
int a[5];
int tail;
int head;
int cap;
}Que;
int deque(Que *q)
{
if((q->head)==-1)
return -1;

int b= q->a[q->head];
(q->head)++;
if(q->head==q->cap)
q->head=0;
if(q->head==q->tail)
q->head=-1;

return b;
}
void initialize(Que *q)
{
q->head=-1;
q->tail=0;
q->cap=5;
}
int enque(Que *q,int num)
{
if((q->head)==(q->tail ))
return -1;
if(q->head==-1)
q->head=0;
q->a[q->tail]=num;
printf("%d \n",q->a[q->tail]);
(q->tail) ++;
if(q->tail ==q->cap)
q->tail=0;
return 0;
}
int main()
{
Que q;
initialize(&q);
int i=1;
for(;i<=5;i++)
{
int num;
printf("input a number: ");
scanf("%d",num);
enque(&q,num);
}
int c=q.a[0];
printf("%d %d %d\n",q.a[2],c,q.a[3]);

}

最佳答案

我在您的 enque/deque 函数中找不到任何问题。问题出在别处。

我使用以下主要内容测试了您的代码:

int main(int argc, char**argv) {
int var = 7456;
Que q;
q.head=-1; q.tail=0; q.cap=5;

enque(&q, 12);
enque(&q, 6);
printf("First queue value =%d\n", deque(&q));
return 0;
}

输出是

First queue value =12

编辑:

错误在这里:

    scanf("%d",num);

将其更改为:

    scanf("%d", &num);

关于c - 循环队列中的数组未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16061549/

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