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;
}