#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct gradeNode {
char lastName[20];
float grade;
struct gradeNode *nextPtr;
};
typedef struct gradeNode GRADENODE;
typedef GRADENODE *GRADENODEPTR;
int main ()
{
char s[20]; /* массив для фамилий */
float gr; /* оценка */
int c = 1;
GRADENODEPTR startPtr = NULL; /* указатель на начало списка */
GRADENODEPTR newPtr = NULL; /* указатель на новый узел */
GRADENODEPTR currentPtr = NULL; /* указатель на текущий узел */
GRADENODEPTR previousPtr = NULL; /* указатель на предыдущий узел */
while (c != -1)
{
printf ("Vvedite imya: ");
scanf ("%s", s);
printf ("Vvedite ocenky: ");
scanf ("%f", &gr);
newPtr = malloc (sizeof(GRADENODE));
if (newPtr != NULL)
{
strcpy (newPtr->lastName, s);
newPtr->grade = gr;
newPtr->nextPtr = NULL;
}
else
printf("oshibka");
previousPtr = NULL;
currentPtr = startPtr;
while (currentPtr != NULL && s[0] > currentPtr->lastName[0])
{
previousPtr = currentPtr;
currentPtr = currentPtr->nextPtr;
}
if (previousPtr == NULL)
{
newPtr->nextPtr = startPtr;
startPtr = newPtr;
}
else
{
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
}
while (startPtr != NULL)
{
printf("%s %.2f -> ", startPtr->lastName, startPtr->grade);
startPtr = startPtr->nextPtr;
}
printf("NULL\n");
newPtr = NULL;
previousPtr = NULL;
currentPtr = NULL;
printf("\nVvedite -1 esli hotite zakonchit");
scanf ("%d", &c);
}
return 0;
}