This reads numbers from the standard input, and sorts them in increasing numerical order. It then prints the sorted numbers.

```/*
*
* This program reads in numbers and sorts them in increasing numerical order
* The data structure used is a linked list; each element looks like this:
*	+--------------+
*	|  data field  |  <--- holds the integer that you read in
*	+--------------+
*	|  next field  |  <--- holds pointer to next element in  list
*	+--------------+       (NULL if nothing follows it)
*
* The pointer variable "head" contains a pointer to the first element in
* the linked list (NULL if there are no elements in the linked list)
*/
#include <stdio.h>
#include <stdlib.h>

/*
* structure for the list
*/
struct num {
int data;		/* data field (the number to be sorted)  */
struct num *next;	/* points to next element in linked list */
/* (NULL pointer if no next element)     */
};

/*
* pointer to the first element (the head) of the list
* NULL if there's nothing in the list
*/

/*
* create a new node
* and initialize the two fields
*/
struct num *createnode(int n)
{
struct num *p;		/* pointer to new space */

/* create the element, reporting errors */
if ((p = malloc(sizeof(struct num))) == NULL)
return(NULL);

/* initialize the element */
p->data = n;
p->next = NULL;

/* return a pointer to the new entity */
return(p);
}

/*
* insert the element that new points to into the linked list,
* and return a pointer to the (possibly new) head of the list
*/
struct num *insert(struct num *new)
{
struct num *prev, *temp;	/* pointers used to insert new element */

/* empty list: put head at the front */
return(new);

/* it goes before the first element */
return(new);
}

/*
* now walk the list
* from here on in, prev->next == temp
* we'll insert after prev and before temp
*/
while(temp != NULL && temp->data < new->data){
/* advance prev and temp */
prev = temp;
temp = temp->next;
}
/*
* here's the insertion
* make prev->nect the new element
* and new->next the one temp points to
*/
new->next = temp;
prev->next = new;

/* return the pointer to the head of the list */
}

/*
* the main routine
* read in numbers and sort them
*/
int main(void)
{
int i;		/* number of numbers read by scanf */
int n;		/* what scanf read */
struct num *p;	/* pointer to element for linked list */

/*
* loop through the input
*/
while((i = scanf("%d", &n)) != EOF){

/* error check; was a number read? */
if (i == 0){
/* no; give error message and print rest of line */
fprintf(stderr, "illegal number: ");
while((i = getchar()) != EOF && i != '\n')
fputc(i, stderr);
fputc('\n', stderr);
continue;
}

/* create a new node, and print error message if failure */
if ((p = createnode(n)) == NULL){
fprintf(stderr, "no more memory on input %d\n", n);
return(EXIT_FAILURE);
}

/* insert new element into linked list */
}

putchar('\n');

/*
* print the list
* start at the head, print the data field of each element
* and go on to the next
*/
for(p = head; p != NULL; p = p->next)
printf("%d\n", p->data);

/* bye-bye */
return(EXIT_SUCCESS);
}
```

 ECS 30-A, Introduction to Programming Spring Quarter 2002 Email: cs30a@cs.ucdavis.edu