Thursday, 2 February 2012

Linked list sample code

/************************************************************
*******************SIMPLE LINKED LIST************************
*************************************************************
Author: Santosh Kumar G K
Date  : 02/02/2012
*************************************************************/

#include<stdio.h>

#define DBUG_PRINT(x...) printf(x)

typedef int           INT32;
typedef unsigned int  UINT32;
typedef unsigned char UINT8;
typedef char          INT8;

/*Global*/
typedef enum _tag_ReturnCode_
{
   SUCCESS,
   FAIL
}ERRORCODE;

typedef struct sample
{
   UINT32        number;
   struct temp   *next;
}sample;

/*Function prototypes*/
ERRORCODE add_node( void );
void display_nodes( void );
void delete_node( void );

sample *HEAD;
/*Function definitions*/
INT32 main( INT32 argc,INT8 *argv[] )
{
   UINT8 choice  = 0,quit = 0;
   while( quit == 0 )
   {
      DBUG_PRINT( "WELCOME TO LINKED LIST!!!!\n" );
      DBUG_PRINT( "0: Quit\n1: Add node\n2: Display all nodes\n3: Delete a node\n" );
      scanf( "%d",&choice );         
         
      switch( choice )
      {
         case 0:/*quit*/
            quit = 1;
            break;
         case 1:/*add node*/
            add_node( );
            break;
         case 2:/*display nodes*/
            display_nodes( );
            break;
         case 3:/*delete node*/
            delete_node( );
            break;
         default:
            DBUG_PRINT("Wrong option!! Re-enter\n");
            break;
       }/*eof switch*/
    }/*eof while*/
    return SUCCESS;   
}/*main*/

ERRORCODE add_node( void )
{
   UINT32    number = 0;
   sample    *temp = NULL,*list = NULL;
   ERRORCODE eReturnCode = SUCCESS;
   DBUG_PRINT( "Enter the number to be updated in linked list\n" );
   scanf( "%d",&number );
   list = ( sample * )malloc( sizeof( sample ) );
   if( list == NULL )
   {
        DBUG_PRINT( "Could not create the node\n" );
        eReturnCode = FAIL;
   }
   else
   {
      list->number = number;
      list->next = NULL;
      if( HEAD == NULL )
      {              
         HEAD = list;
      }
      else
      {
         temp = HEAD;
         while( temp->next != NULL )
            temp = temp->next;
         temp->next = list;  
      }
   }/*eof else*/
   return eReturnCode;                     
}/*add_node*/

void display_nodes( void )
{
   sample *temp;
   UINT32 count = 0;
   temp = HEAD;
   if( HEAD == NULL )
   {
      DBUG_PRINT("No nodes to display!\n");
   }
   else
   {
      while( temp != NULL )
      {
         DBUG_PRINT( "[%d]: Node value = %d \n",++count,temp->number );
         temp = temp->next;
      }
   }
}/*display_nodes*/

void delete_node( void )
{
   UINT32 number = 0,search = 0;
   sample *temp,*prev;
   DBUG_PRINT( "Enter the number of which to delete\n" );
   scanf( "%d",&number );
   temp = HEAD;
   while( temp != NULL )
   {
      if( ( temp->number == number ) && ( temp == HEAD ) )
      {
          prev = temp->next;
          free( temp );
          HEAD = prev;
          search = 1;
          break;
      }
      else if( temp->number == number )
      {
         prev->next = temp->next;
         free( temp );
         search = 1;
         break;
      }/*eof if*/
      prev = temp;
      temp = temp->next;
   }/*eof while*/

   if( search == 0 )
      DBUG_PRINT( "No nodes found !\n" );
   else
      DBUG_PRINT( "Node found! Deleted \n" );
}/*delete_node*/

/*EOF FILE*/

No comments:

Post a Comment