The Sorted Linked List
A sorted linked list is a linear collection of self-referential
structures, called nodes, connected by pointer links, where the
nodes are kept in sorted order by the values found in a particular data member,
known as the key.  A sorted linked list, like a general linked list is accessed
by keeping a pointer to the first node of the list.  This pointer to the first
node of a list is typically named head.  Subsequent nodes are accessed 
via a link pointer member that is stored in each node.  Additions of nodes to
a sorted linked list, require that the node is placed in the correct position
to keep the list in order by the key.
The operations on linked lists include :
- creation of a node
    
- setting data into a node
    
- adding a node to the list
    
- deleting a node from the list
    
- is the list empty
    
- printing the list
The sorted linked list user interface :
/*************************************************\
* Filename:      sortedll.h                       *
* Author:        Sue Bogar                        *
* Date Written:  4/22/98                          *  
* Date Modified: 11/22/98                         *
* Section:       101                              *
* EMail:         bogar@cs.umbc.edu                *
*                                                 *
* Description:  This header file contains the     *
* structure definition for a node type, to be     *
* used as the nodes of a linked list, and the     *
* function prototypes for the functions defined   *
* in sortedll.c, the linked list implementation   *
* of the sorted linked list ADT.                  *
\*************************************************/
#ifndef _sortedll_h
#define _sortedll_h
/****************
* This typedef allows us to call the type
* of a pointer to a node a NODEPTR
*****************/
typedef struct node *NODEPTR;
/*****************
* This struct, typedefed to be of type info, is meant 
* to store all the data about cars in a parking lot.
*****************/
typedef struct info
{
  char tagNo[8];
  char owner[25];
  char make[15];
  char model[15];
  int  lot;
} INFO;
/*****************
* The sorted linked list is implemented as 
* a structure that has two members, the first to
* to hold data (in this case a struct of type info) 
* and the second member is of type NODEPTR which 
* holds a pointer to the next node of the list.
* This pointer is known as the a link of the 
* linked list.
*****************/
typedef struct node
{
    INFO     data;
    NODEPTR  next;
} NODE;
/*****************************************************/
/******************
* CreateNode mallocs the space needed to
* hold a struct of type node, initializes
* the members, and returns a pointer to
* the new node.
******************/ 
NODEPTR CreateNode (void);
/******************
* SetData places the values
* found in the info structure
* passed to it into the
* node pointed to by the NODEPTR it
* receives as an argument.
******************/ 
void SetData (NODEPTR temp, INFO new);
/******************
* Insert takes a pointer to a NODEPTR, the
* address of head, and a NODEPTR, temp, as 
* arguments.  temp is a pointer to the 
* node to be inserted.  The node is then
* inserted into the list at the appropriate
* place to maintain the list as a sorted list.
******************/ 
void Insert (NODEPTR* headPtr, NODEPTR temp);
/******************
* Delete takes a pointer to a NODEPTR as its 
* first argument, which is the address of head.  
* Its second argument is a struct of type info,
* which contains the license plate tag number to 
* be removed.  The third argument is the string 
* in which to store a message.  This function 
* traverses the list until the node containing the 
* target tagNo is found.  That node is then deleted 
* from the list and a message returned stating that
* fact.  If the target tagNo is not in the list and
* a message is returned that it was not found.
******************/ 
int Delete (NODEPTR* headPtr, char* target);
/******************
* IsEmpty takes a NODEPTR as its first
* argument, which is a pointer to the 
* first node in the list, commonly
* known as head.  It determines whether the
* list is empty or not and returns 1 (true)
* if the list is empty and 0 (false) if it
* is not empty.
******************/ 
int IsEmpty (NODEPTR head);
/******************
* PrintList takes a NODEPTR as an argument
* which is a pointer to the first node in
* the list, commonly known as head.
* he list is traversed and the values
* of each of the data members of each node are
* printed.
******************/ 
void PrintList (NODEPTR head);
#endif