gpt4 book ai didi

c - 这个队列实现有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:00 25 4
gpt4 key购买 nike

以下是我的队列实现。我的队列只是两个 qnode 的数组:head 和 rear。 enqueue 和 dequeue 应该处理内部队列实现。

Q[0].next == Q[1].next 的输出在我用不同的整数调用 enqueue 后变为 1。我无法找出错误。

struct Qnode{
int index;
struct Qnode *next;
};
typedef struct Qnode qnode;

qnode* makeQueue(){
qnode *Q;
Q = (qnode *) malloc(2*sizeof(qnode));
qnode head,tail;
head.next = NULL;
tail.next = NULL;
head.index = 0;
tail.index = -1;
Q[0] = head;
Q[1] = tail;
return Q;
}

void enQueue(qnode *Q, int index){
qnode node,head = Q[0], rear = Q[1];
node.index = index;
node.next = NULL;
if(head.next == NULL && rear.next == NULL){
head.next = &node;
rear.next = &node;
}
else{
(rear.next)->next = &node;
rear.next = &node;
}
Q[0].index = head.index + 1;
}

谢谢

最佳答案

enQueue 函数有问题

qnode node,head = Q[0], rear = Q[1];
node.index = index;
node.next = NULL;
if(head.next == NULL && rear.next == NULL){
head.next = &node;
rear.next = &node;
}

上面的代码片段将局部作用域变量的地址分配给 head.nextrear.next:即堆栈分配的变量。

node 变量只会存在到函数结束。所以这些指针的地址在函数外是无效的:在函数外访问它是非法的并且 Undefined Behavior

此外,对该函数所做的所有修改都不会反射(reflect)到 Q 数组:您正在修改数组元素的局部作用域副本。

关于c - 这个队列实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412672/

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