rendered paste body #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#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 <string.h>
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;
}
}