C中使用链表的队列只将最后一个节点作为一个整体无限队列
Queues Using Linked List in C only take last node as a whole infinite queue
我正在做一个数据结构项目。我被要求从名为“ToServe.txt”的文件中获取信息。文件中的数据格式为:
TicketNumberSpaceStudentIDSpaceStudentName
TicketNumberSpaceStudentIDSpaceStudentName
然而,实现下面的两个功能,我只能无限次地得到队列中的最后一个学生
int Start(advisee** front, advisee** rear) {
advisee* student, *walker;
FILE* infp;
student = (advisee*)malloc(sizeof(advisee));
infp = fopen("ToServe.txt", "r");
if(infp == NULL) {
return 0;
}
while(!feof(infp)) {
fscanf(infp, "%d", &student->ticket);
fscanf(infp, "%d", &student->ID);
fgets(student->name, 100, infp);
student->next = NULL;
enqueue(front, rear, student);
}
walker = *front;
fclose(infp);
return 1;
}
void enqueue(advisee** front, advisee** rear, advisee* ToAdd) {
if (*front == NULL)
*front = ToAdd;
else
(*rear)->next = ToAdd;
*rear = ToAdd;
}
只分配了一项:
advisee* student = (advisee*)malloc(sizeof(advisee));
...并且循环只是不断改变那个单一的被建议者,并重复将 same 指针添加到队列中。所以队列最终指向一个被建议者。
解决方案是将分配移动到循环内。
我正在做一个数据结构项目。我被要求从名为“ToServe.txt”的文件中获取信息。文件中的数据格式为:
TicketNumberSpaceStudentIDSpaceStudentName
TicketNumberSpaceStudentIDSpaceStudentName
然而,实现下面的两个功能,我只能无限次地得到队列中的最后一个学生
int Start(advisee** front, advisee** rear) {
advisee* student, *walker;
FILE* infp;
student = (advisee*)malloc(sizeof(advisee));
infp = fopen("ToServe.txt", "r");
if(infp == NULL) {
return 0;
}
while(!feof(infp)) {
fscanf(infp, "%d", &student->ticket);
fscanf(infp, "%d", &student->ID);
fgets(student->name, 100, infp);
student->next = NULL;
enqueue(front, rear, student);
}
walker = *front;
fclose(infp);
return 1;
}
void enqueue(advisee** front, advisee** rear, advisee* ToAdd) {
if (*front == NULL)
*front = ToAdd;
else
(*rear)->next = ToAdd;
*rear = ToAdd;
}
只分配了一项:
advisee* student = (advisee*)malloc(sizeof(advisee));
...并且循环只是不断改变那个单一的被建议者,并重复将 same 指针添加到队列中。所以队列最终指向一个被建议者。
解决方案是将分配移动到循环内。