[英]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.