All pastes #553987 Raw Edit

Mine

public text v1 · immutable
·published 2007-06-09 23:28 UTC
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;
	}
}