gpt4 book ai didi

c - 在 C 中实现队列时遇到问题

转载 作者:行者123 更新时间:2023-11-30 17:20:12 25 4
gpt4 key购买 nike

我正在尝试用c语言实现一个队列。我已经在我的代码中实现了排队函数。但是,当我测试它时,我没有得到所需的输出。有人可以告诉我我做错了什么吗?

struct queue{

int array[30];
int *front; //pointer to front of queue
int *rear; //pointer to rear of queue

int count; //counts number of elements in queue
};

//初始化队列

struct queue * new_Queue()
{

struct queue *q;
q->count=0;
q->front=&q->array[-1];
q->rear=&q->array[-1];

return q;
};

int queueCount(struct queue *q)
{
return q->count;
}

int isFull(struct queue *q)
{
if(q->count==30){
printf("%s","Buffer is full!");
return 1;
}

return 0;
}

int isEmpty(struct queue *q)
{

if(q->count==0){
printf("%s","Queue is empty!");
return 1;
}
return 0;
}



int enqueue(struct queue * q,int i)
{

if(isFull(q)){
return 0;
}

if(isEmpty(q)){
q->front+1;

}

int k=*(q->rear+1);

q->array[k]=i;
printf("enque success!");


return 1;
}

int main(int argc, char**argv)
{
int i=10;

struct queue *newQueue;

enqueue(newQueue,i);
int j= queueCount(newQueue);
printf("%d",j);

}

最佳答案

您的队列需要内存。目前,您有一个未初始化的指针,它指向内存中的随机位置。取消引用该指针是未定义的行为,并且很可能会给您带来段错误。

您必须决定如何存储队列。您可以使用malloc 在堆上分配它。这就是您的函数 new_Queue 应该执行的操作:

struct queue *new_Queue()
{
struct queue *q = malloc(sizeof(*q)); // TO DO: Error checking

q->count = 0;
q->front = q->array;
q->rear = q->array;

return q;
}

您的客户端代码如下所示:

struct *q = new_Queue();

enqueue(q, x);
// Do more stuff ...

free(q); // Release resources

队列结构并不大。您也可以在堆栈上分配它。在这种情况下,您需要一个初始化函数:

void queue_init(struct queue *q)
{
q->count = 0;
q->front = q->array;
q->rear = q->array;
}

并这样调用它:

struct queue *q;

queue_init(&q);
enqueue(&q, 12);

注意 addres-of 运算符 &。您不必(也不能)释放此处的队列。

您无法访问索引 -1 处的数组。您可以使前面成为下一个要出列的元素,使后面指向下一个元素排队的空间。在循环缓冲区中,这将使空列表和满列表的情况难以区分,但您可以使用 count 来区分它们。

关于c - 在 C 中实现队列时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661438/

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