what to know if im on the right track for this ordered linked list ias i get each record i want to insert it into the linked list in order.
Code:#include <assert.h> #include <stdio.h> #include <stdlib.h> #define Nlen 26 typedef struct person_t { char FName[Nlen]; char LName[Nlen]; char Sex; char Grade; } PERSON; void amend_file( char file[], PERSON *STU ); void show_file( char file[], PERSON *STU ); struct listNode { char data; struct listNode *priorPtr; struct listNode *nextPtr; }ListNode; struct listNode *start = NULL; struct listNode *last = NULL; int main (void) { PERSON *STU; int Ans; char file[] = "data.txt"; int Records [100]; do { printf("\n\n" "1. Enter new record\n" "2. Display List\n" "3. Quit\n\n"); printf("Prompt: "); fflush(stdout); if ( scanf("%d", &Ans) == 1 ) /* get answer */ { STU = (PERSON*) malloc (sizeof (PERSON)); if (STU == NULL) { perror("PERSON"); exit(EXIT_FAILURE); } switch(Ans) { case 1: amend_file(file, STU); HEAD->LName = data; data = (struct person_t *) malloc(sizeof(person_t)); if(!data) return -1; data->data =LNAME ; insert(data, &start, &last); } tempnode = start; fprintf(fin, "%s %s %c %c\n", HEAD->LName, HEAD->FName, HEAD->Sex, HEAD->Grade); fflush(fin); fclose(fin); break; case 2: show_file(file, STU); break; case 3: default: Ans = 3; break; } } /* /get answer */ } while ( Ans != 3 ); fflush(stdout); free(STU); return EXIT_SUCCESS; } /* * amend_file: Enter stuff into the working file. * Very much a bare bones function so far; work on making this better * Perhaps make it work with a linked list, as your struct suggests? */ void amend_file( char file[], PERSON *HEAD ) { assert(HEAD != NULL); FILE *fin = fopen(file, "a"); if ( fin == NULL ) { perror(file); exit(EXIT_FAILURE); } printf("Enter new record: "); printf ("\nEnter students First name ( up to %d letters):", Nlen); printf ("\nEnter students Last name ( up to %d letters):", Nlen); printf ("\nPlease enter Sex"); printf ("\nPlease enter Grade\n"); scanf("%s %s %c %c", &HEAD->FName, &HEAD->LName, &HEAD->Sex, &HEAD->Grade); } /* * show_file: Reads the working file. * Bare bones again... */ void show_file ( char file[], PERSON *HEAD ) { assert(HEAD != NULL); int b = 1; FILE *fout = fopen(file, "r"); if (file == NULL) { perror(file); exit(EXIT_FAILURE); } while (fscanf(fout, "%s %s %c %c", &HEAD->FName, &HEAD->LName, &HEAD->Sex, &HEAD->Grade) == 4) { printf("Record %d: %s %s %c %c\n", b, HEAD->FName, HEAD->LName, HEAD->Sex, HEAD->Grade); b++; } fclose(fout); } //Ordered Linked list //******************************************************************* void insert( struct listNode *newnode, /* new node */ struct listNode **start, /* first node */ struct listNode **last /* last node */ ) { struct listNode *oldptr, *ptr; if(*last == NULL) /* first node in linklist */ { newnode->nextPtr = NULL; newnode->priorPtr = NULL; *last = newnode; *start = newnode; return; } ptr = *start; /* start at top of linklist */ oldptr = NULL; while(ptr) { if(ptr->data < newnode->data ) { oldptr = ptr; ptr = ptr->nextPtr; } else { if(ptr->priorPtr) { ptr->priorPtr->nextPtr = newnode; newnode->nextPtr = ptr; newnode->priorPtr = ptr->priorPtr; ptr->priorPtr = newnode; return; } newnode->nextPtr = ptr; /* newnode first node */ newnode->priorPtr = NULL; ptr->priorPtr = newnode; *start = newnode; return; } } oldptr->nextPtr = newnode; newnode->nextPtr = NULL; newnode->priorPtr = oldptr; *last = newnode; }



LinkBack URL
About LinkBacks


