C Programming

Program 67) Write a program to create a linear linked list interactively and print out the list and the total number of items in the list.

The program first allocates a block of memory dynamically for the first node using the statement
                  head = (node *) malloc (sizeof(node)) ;
which returns a pointer to a structure of type node that has been type defined earlier. The linked list is then created by the function create. The function requesta for the number to be placed in the current node that has been created. If the value assigned to teh current node is -999, then null is assigned to teh pointer variable next and the list ends. Otherwise, memory space is allocated to the next node using again the malloc function and the next value is placed into it. Not that the function create calls itself recursivley and the process will continue until we enter the number -999.
The items stored in the linked list are printed using the function print, which accepts a pointer to the current node as an argument. It is a recursive function and the stops when it recieves a NULL pointer. Printing algorithm is as follows;
1. Start with the first node.
2. While there are valid nodes left to print
      (a) print the current nodes left to print
      (b) advance to next node.
Similarly, the function count counts the number of items in the list recursively and return the total number of items to teh main function. Note that the counting does not include the item -999 (contained in the dummy node).

                                       PROGRAM

#include <stdio.h>
#include <stdlib.h>
#define NULL 0

struct linked_list
{
            int number ;
            struct linked_list *next ;
} ;
typedef struct linked_list node;  /*  node type defined   */

main ( )
 {
       node *head ;
       void create (node *p) ;
      int count (node *p) ;
       void print (node *p) ;
      head = (node *) malloc (sizeof (node)) ;
      create (head) ;
      printf ("\n") ;
      printf ("head") ;
      printf ("\n") ;
      printf ("\nNumber of itemns  = %d \n", count (head)) ;
}
void create (node *list)
{
    printf ("Input a number\n") ;
    printf ("(type -999 at end); ") ;
    scanf (%d', &list -> number) ;  /*Create current node*/

    if (list->number == -999)
    {
          list->next = NULL ;
     }
     else /* create next node  */
      {
         list->next = (node *) malloc (sizeof (node)) ;
         create (list->next) ;  */  Recursion occurs  */
      }
      return ;
 }
 void print (node *list)
 {
     if (list->next  ! = NULL)
     {
        printf ("%d-->", list ->number) ; /*print current item*/

        if (list->next->next == NULL)
              printf ("%d", list->next->number) ;

       printf (list->next) ;    /*   move to the next  item   */
     }
      return ;
  }

  int count (node *list)
  {
      if (list->next == NULL)
               return (0) ;
      else
                 return (1 + count (list->next)) ;
 }

Output:       Input a number
                   (type -999 to end) ; 60
                   Input a number
                   (type -999 to end) ; 20
                   Input a number
                   (type -999 to end) ; 10
                   Input a number
                   (type -999 to end) ; 40
                   Input a number
                   (type -999 to end) ; 30
                   Input a number
                   (type -999 to end) ; 50
                   Input a number
                   (type -999 to end) ; -999

                  60 -->20 -->10 -->40 -->30 -->50 --> -999

                  Number of items = 6

No comments:

Post a Comment