gpt4 book ai didi

C——链表队列;前面总是等于后面

转载 作者:行者123 更新时间:2023-11-30 17:35:38 24 4
gpt4 key购买 nike

我正在尝试使用存储空指针的链表在 C 中实现队列。我的插入功能有问题;插入后,前面始终等于后面(使用整数进行测试)。我很难准确指出问题所在。

typedef struct node{
void *data;
struct node *next;
} Node;

typedef struct queueStruct{
struct node *front, *rear;
} queueStruct;

typedef struct queueStruct *QueueADT;

QueueADT que_create( ){
QueueADT queue;
queue = (QueueADT) malloc(sizeof(queueStruct));
if(queue != NULL){
queue->front = queue->rear = NULL;
}
else{
printf("Insufficient memory for new queue.\n");
exit(1);
}
return queue;
}

void que_insert( QueueADT queue, void *data ){

Node *newNode;
newNode = malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if(queue->front == NULL){
queue->front = queue->rear = newNode;
}
else{
queue->rear->next = newNode;
queue->rear = newNode;
}
printf("%i\t%i\n", *((int *) queue->front->data), *((int *)queue->rear->data) );
}
int main(void){
QueueADT test;
test = que_create();
for(int i=0; i<9; ++i) {
que_insert(test, (void *) &i);
}
}

最佳答案

使用:

int main(void)
{
int a =1, b=2, c=3;
struct queueStruct queue = {0};
que_insert( &queue, &a);
que_insert( &queue, &b);
que_insert( &queue, &c);
}

我得到:

> ./q
1 1
1 2
1 3

看来这对我有用。再说一遍,您没有发布您的驱动程序代码。如果你正在做类似的事情:

int main(void)
{
int a=1;
struct queueStruct queue = {0};
que_insert( &queue, &a);
a=2;
que_insert( &queue, &a);
}

那么它总是相同的,因为两个节点都指向内存中的相同地址,所以当你将 a 更改为 2 时,两个节点的指针都指向相同的内存,因此同时更改。这很可能是您真正的问题。

关于C——链表队列;前面总是等于后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972746/

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