#include #include #include #define MAX_LEN 100 #define LPAREN 0 #define RPAREN 1 #define INTEGER 2 #define STRING 3 typedef int TokenType; typedef struct token { TokenType type; union { int x; char string[MAX_LEN]; } value; } Token; // Definition for the array of courses typedef struct course { char name[MAX_LEN]; int code; } Course; struct coursenode { Course *coursedata; int grade; struct coursenode *next; }; typedef struct courselist { struct coursenode *root; } CourseList; // Definitions required for the list of students data typedef struct student StuNode; struct student { char name[MAX_LEN]; int am; int EntryYear; CourseList courses; // Pointer to the next student in the list StuNode *next; }; typedef struct studlist { StuNode *root; } StuList; extern Course courses[]; Token ReadNextToken(); #include "list.h" #include void CreateStuList(StuList *list); StuNode *InsertAfterStuNode(StuList *list,StuNode *node, CourseList *clist, struct coursenode *cnode); void PrintStuList(StuList *list, StuNode *node, CourseList *clist, struct coursenode *cnode); int main() { StuList list; StuNode *temp,*previous; Token token; CourseList clist; struct coursenode *cnode; CreateStuList(&list); previous=list.root; clist.root = NULL; cnode= clist.root; InsertAfterStuNode(&list,previous,&clist,cnode); printf("print List---------\n"); previous=list.root; cnode=clist.root; PrintStuList(&list,previous,&clist,cnode); return 0; } StuNode *InsertAfterStuNode(StuList *list,StuNode *node,CourseList *clist,struct coursenode *cnode ) { Token token; int elegxos=0,am,year; char name[MAX_LEN]; StuNode *newnode=malloc(sizeof(*newnode)); struct coursenode *newcoursenode; while((token=ReadNextToken()).type != EOF) { if(token.type==STRING) { strcpy(newnode->name,token.value.string); printf("%s",newnode->name); if((token=ReadNextToken()).type == INTEGER); newnode->am=token.value.x; if((token=ReadNextToken()).type == INTEGER); newnode->EntryYear=token.value.x; printf("%d",newnode->am); printf("%d",newnode->EntryYear); if((token=ReadNextToken()).type == LPAREN) { printf("\n\n 77777777777777777 \n\n"); clist->root=NULL; newcoursenode = malloc(sizeof(*newcoursenode)); while(token.type !=RPAREN) { if((token=ReadNextToken()).type==INTEGER) { newcoursenode->coursedata=&courses[token.value.x]; printf("%s %d",newcoursenode->coursedata->name,newcoursenode->coursedata->code); } if((token=ReadNextToken()).type==INTEGER) { newcoursenode->grade = token.value.x; printf(" %d",newcoursenode->grade); } if(cnode == NULL) { newcoursenode->next=clist->root; clist->root=newcoursenode; cnode = newcoursenode; } else { newcoursenode->next= cnode->next; cnode->next = newcoursenode; cnode=newcoursenode; } // newnode->courses.root = clist->root; // if((token=ReadNextToken()).type!=RPAREN) newcoursenode = malloc(sizeof(*newcoursenode)); } newnode->courses.root=clist->root; } } if(token.type==RPAREN) { // if((token=ReadNextToken()).type==RPAREN) // { if(node==NULL) { newnode->next=list->root; list->root=newnode; node=newnode; } else { //node=newnode; newnode->next=node->next; node->next=newnode; node=newnode; } if((token=ReadNextToken()).type == LPAREN) newnode = malloc(sizeof(*newnode)); // } printf("\n"); } return newnode; } void CreateStuList(StuList *list) { list->root = NULL; } void PrintStuList(StuList *list,StuNode *node, CourseList *clist, struct coursenode *cnode) { StuNode *currentnode = list->root; struct coursenode *currentcoursenode = currentnode->courses.root; while(currentnode) { printf("%s %d %d\n",currentnode->name, currentnode->am,currentnode->EntryYear); printf("\n"); currentcoursenode = currentnode->courses.root; while(currentcoursenode) { printf("%s %d \n %d \n\n",currentcoursenode->coursedata->name,currentcoursenode->coursedata->code, currentcoursenode->grade); currentcoursenode = currentcoursenode->next; } // currentcoursenode = clist->root; currentnode = currentnode->next; } }