gpt4 book ai didi

c - 需要帮助检查 C 中的链表

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

我在搜索链表时遇到问题。我正在制作一个成绩簿程序,并且正在检查输入错误,以查看用户是否输入了现有类(class)以注册学生参加该类(class)。

所以这是带有双向链表的类(class)信息结构。

typedef struct Course_Info // Course information
{
int Course_ID;
char Course_Name[15];
struct Course_Info *next;
} Course;

typedef struct // Linked list for Course
{
int Ctracker; // Keeps track of courses
Course *Course_Head;
Course *Course_Tail;
} List_Course;

以及它们对应的变量以及初始化。

 List_Student Students;
List_Course Courses;
Grade_List Grades;

Students.Stracker = 0;
Students.Student_Head = Students.Student_Tail = NULL;

Courses.Ctracker = 0;
Courses.Course_Head = Courses.Course_Tail = NULL;

Grades.Grade_cnt = 0;
Grades.Grade_Head = Grades.Grade_Tail = NULL;

在这个函数中,我要为学生注册一门类(class),但首先我要进行一些输入检查以确保该类(class)存在。

void EnrollStudent(List_Course *Courses, List_Student *Students)
{
int CID; int SID;

printf("Enter course ID: ");
scanf("%d%*c", &CID);

if( CID != Courses -> Course_Head -> Course_ID)
{
printf("Course does not exist!\n");
return;
}
else
{
printf("Found class!\n");
}
}

我目前的问题是它只搜索链表的第一个元素。我如何着手制作一个检查整个链表的循环?

最佳答案

迭代链表非常简单。

您需要使用一个局部变量,它是列表的当前元素,您将其初始化为 Courses->Course_Head,例如:

Course* current = Courses->Course_Head;

然后直到 current != NULL 你只是不断更新 current 指向下一个元素,例如:

while (current != NULL) {
// do what your want with current
current = current->next;
}

请注意,在您的示例中,您谈论的是双向链表,但它是一个单链表,带有两个指向头和尾的指针,双链表在两个方向上的每个节点都有两个指针,因此您可以反向遍历它顺序,但您的情况并非如此。

关于c - 需要帮助检查 C 中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803896/

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