c - 如何实现具有多元素结构的链表?

标签 c arrays pointers struct linked-list

经过几个小时的阅读,我想我可以澄清我的问题。这是一个与作业相关的问题,但我正在寻求有关概念的帮助;不是我的确切代码的解决方案。包含我的代码用于可视化目的。

我在读入我的程序的文本文件中有以下数据:

HIS1043.002 MH2.102   MWF   1:00-1:50pm     120 35.00
GEO1013.005 MB1.101   TR   12:30-1:45pm       5 35.00
MAT1214.003 MS1.02.03 TR    2:00-3:15pm       1 35.00
CS1713.002  NPB1.202  MWF   1:00-1:50pm       0 50.00
MAT3013.001 MS1.02.07 TR    2:00-3:15pm       1 35.00
ENG1023.001 MH2.202   MWF  10:00-10:50am     15 35.00

下面是我使用的两个 typedef 结构:

// Course Definition
typedef struct
{
    StudentNode *pWaitlistHead;    
    char szCourseId[12];  
    char szRoom[15];
    char szDays[15];
    char szTimes[15];  
    int  iAvailSeats; 
    double dFee; 
} Course;


// Node for course list
typedef struct CourseNode {
    struct CourseNode* pNext;
    Course course;
} CourseNode;

这是从文件中读取数据的函数。在该函数中,我调用了另外两个函数:一个为类(class)节点分配空间,一个将数据添加到列表中。

int getCourses(Course courseM[])
{
    char szInputBuffer2[100];
    int i = 0;

    while(fgets(szInputBuffer2, 100, pFileCourses) != NULL)
    {
        sscanf(szInputBuffer2, "%12s  %15s %8s %15s %d %lf", 
                          courseM[i].szCourseId, courseM[i].szRoom, 
                          courseM[i].szDays, courseM[i].szTimes, 
                          &courseM[i].iAvailSeats, &courseM[i].dFee);
    }
    //allocate space for linked-list
    pNew = allocateNodeC(courseM); //???

    //add courses to linked list
    insertN2CourseList(&pHead, &pNew);  

    return i;
}

我的问题是关于如何在列表实现中处理类(class)描述数据。我是否需要在分配中单独处理每个元素?从文件中读取所有数据时怎么办?

    //allocate space for CourseNode linked list
CourseNode *allocateNodeC(Course courseM[])
{
    CourseNode *pNew = malloc(sizeof(CourseNode));
    pNew->pNext = NULL;
    pNew->course.szCourseId = courseM[i].szCourseId; //?????
    pNew->course.szRoom = courseM[i].szRoom; //?????
    pNew->course.szDays = courseM[i].szDays; //?????
    pNew->course.szTimes = courseM[i].szTimes; //?????
    pNew->course.iAvailSeats = courseM[i].iAvailSeats; //?????
    pNew->course.dFee = courseM[i].dFee; //?????
    return pNew;
}
//add courses to linked list
CourseNode insertN2CourseList(CourseNode **ppHead, CourseNode *ppNew)
{
    CourseNode p*;
    if(*ppHead == NULL)
    {
        *ppHead = pNew;
        return;
    }
    for(p = *ppHead; p->pNext != NULL; p = p->pNext);
}

最佳答案

szCourseIdszRoomszDaysszTimes 都是 char [] 用于存储从文件中读取的字符串:

        sscanf(szInputBuffer2, "%12s  %15s %8s %15s %d %lf", 
                      courseM[i].szCourseId, courseM[i].szRoom, 
                      courseM[i].szDays, courseM[i].szTimes, 
                      &courseM[i].iAvailSeats, &courseM[i].dFee);

并且在 allocateNodeC() 中,您尝试分配给数组:

    pNew->course.szCourseId = courseM[i].szCourseId; //?????
    pNew->course.szRoom = courseM[i].szRoom; //?????
    pNew->course.szDays = courseM[i].szDays; //?????
    pNew->course.szTimes = courseM[i].szTimes; //?????

C 中,数组不可赋值。相反,您应该使用 strcpy()courseM 成员的内容复制到新创建的节点,如下所示:

    strcpy (pNew->course.szCourseId, courseM[i].szCourseId);
    strcpy (pNew->course.szRoom, courseM[i].szRoom);
    strcpy (pNew->course.szDays, courseM[i].szDays);
    strcpy (pNew->course.szTimes, courseM[i].szTimes);

此外,这似乎不是实际代码,因为在函数 allocateNodeC() 中没有声明 if i 并且您正在访问 courseM[我].

关于c - 如何实现具有多元素结构的链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202462/

相关文章:

c - 什么是 int (*tabes)[N]?

c - 将二进制文件传递给 erlang nif

c - 如何安装 C 版 Eclipse

java - 将数组与 Switch 语句一起使用时需要常量表达式

python - 访问 Numpy 3 维数组中的短对角线元素

python - 如何定义 RegularGridInterpolator 的值

c - 在此示例中如何将递归转换为尾递归?

c - 是否有必要对 malloc 和 calloc 进行类型转换

c++ - 指向类成员函数错误的函数指针

c - scanf 指针段错误