簡體   English   中英

C-訪問鏈接列表中的鏈接列表

[英]C - Accessing linked list inside of linked list

我正在嘗試創建一個學生的鏈接列表,其中每個學生都有一個成績的鏈接列表。 我被困在嘗試使用以下數據結構訪問學生的成績:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

typedef struct student_list_struct{
    char student[MAX];
    struct grades_list_struct *grade_head_ptr;
    struct student_list_struct *next;
} StudentNode;

typedef struct grades_list_struct{
    int grade;
    struct student_list_struct *next;
} GradeNode;

GradeNode *insertGrade(int grade, GradeNode *head){
    GradeNode *newNode=NULL;
    newNode=(GradeNode*)calloc(1, sizeof(GradeNode));

    if(head!=NULL){
        newNode->grade=grade;
        return newNode;
    } else {
        newNode->grade=grade;
        newNode->next=NULL;
        return newNode;
    }
}

StudentNode *insertStudent(char studentName[MAX], int studentGrade, StudentNode *head){
    StudentNode *newNode=NULL;
    newNode=(StudentNode*)calloc(1, sizeof(StudentNode));
    newNode->grade_head_ptr=(GradeNode*)calloc(1, sizeof(GradeNode));

    if (head==NULL){
        strcpy(newNode->student, studentName);
        newNode->next=NULL;
        newNode->grade_head_ptr=insertGrade(studentGrade, newNode->grade_head_ptr);
        return newNode;
    } else {
        strcpy(newNode->student, studentName);
        newNode->grade_head_ptr->grade=studentGrade;
        newNode->grade_head_ptr=insertGrade(studentGrade, newNode->grade_head_ptr);
        return newNode;
    }
}

void printGrades(char studentName[MAX], StudentNode *head){
    StudentNode *p=NULL;
    p=head;

    while (p!=NULL){
        if (strcmp(p->student,studentName)==0){
            printf("%d\n", p->grade_head_ptr->grade);
        }
        p->grade_head_ptr=p->grade_head_ptr->next;
    }
}

int main(){
    StudentNode *head=NULL;
    StudentNode *temp=NULL;

    head=insertStudent("Student A", 10, head);
    head=insertStudent("Student A", 20, head);
    printGrades("Student A", head);
}

它當前不打印或返回任何內容,我無法弄清楚數據結構出了什么問題。 這可能與我嘗試使用head->grade_head_ptr->grade訪問head->grade_head_ptr->grade

任何幫助將不勝感激。

在函數insertStudent中使用grade_head_ptr指針之前,請不要分配它。 這將導致分割錯誤。 因此,請在此函數中分配newNode指針后使用。

newNode->grade_head_ptr = (GradeNode*)calloc(1, sizeof(GradeNode));

用於為grade_head_ptr分配內存這是整個功能insertStudent

StudentNode *insertStudent(char studentName[100], int studentGrade, StudentNode *head) {
    StudentNode *newNode = NULL;
    newNode = (StudentNode*)calloc(1, sizeof(StudentNode));
    newNode->grade_head_ptr = (GradeNode*)calloc(1, sizeof(GradeNode));

    if (head == NULL) {
        strcpy(newNode->student, studentName);
        newNode->next = NULL;
        newNode->grade_head_ptr->grade = studentGrade;
        newNode->grade_head_ptr->next = NULL;
        return newNode;
    }
    else {
        strcpy(newNode->student, studentName);
        newNode->grade_head_ptr->grade = studentGrade;
        return newNode;
    }
}

對於使用insertStudent ,您正在使用字符串文字“ Student A”,它將報告編譯器錯誤,因為它理解是const char *與函數原型不兼容。 因此,請使用字符數組並為其分配“學生A”值:

    char studentName[] = "Student A";
    head = insertStudent(studentName, 10, head);

那應該可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM