Linked List Demo

Linked List

Linked List

This is a C Program to perform list traversal operation using linked list. This C program to show the basic functions of linked list such as add, delete, append and delete.

#include "stdio.h"
#include "alloc.h"
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<string.h>

create ();
void append();
void add();
void del();
void print();

typedef struct s_list
       {
       int val;
       struct s_list *next;
       }*SLL;

SLL start,last,temp,extra,one;
void checkme();
//check if list is empty if so automatically create it...
void checkme()
{
temp=start;
       if(temp==NULL)    //start==null then goto create
 {
 printf("\n\t\t\t\t Entering creating mode...");
 create();           //okay...
 }
}


// main start here with no arguments...
main()
     {
     int choice;
     clrscr();
     start=NULL;   // always make start node NULL

   MENU:   printf("\n MENU\n\n 1: create\n 2: append\n 3: print\n 4: add\n 5: delete \n 6: exit :_____\b\b\b\b");
   scanf("%d",&choice);

   switch(choice)
    {
    case 1: create();  break;
    case 2: append();  break;
    case 3: print();   break;
    case 4: add();     break;
    case 5: del();     break;
    case 6: exit(0);
    default: printf("\n choice failed...");break;
    }
    goto MENU;
       }

create()
       {
       if(start==NULL)
  {
   start= malloc(sizeof(struct s_list));  //alloc the struct s_list
   printf("\n\t\t\t\t input initilal value:");
   scanf("%d",&start->val); // get init value
   start->next=NULL;     // if you fail to mke this null...garbage list is placed
  }
  else
   {
    printf("\n\t\t\t\t already created...");
   }
 return;
       }




void  append()
      {
 temp=start;   // always give starting of list to temporary
       // so that we can make changes...
  if(temp==NULL)
  {
   printf("\n\t\t\t\t entering creating mode...");
   create();
  }
  else
      {
       last=malloc(sizeof(struct s_list));
       if(last==NULL){printf("\n\t\t\t\t not enough memory...");}
       while(temp->next!=NULL) temp=temp->next;
       printf("\n\t\t\t\t N enter value : ");
       scanf("%d",&last->val);
       last->next=NULL;
       temp->next=last;
      }
 return;
      }


void print()
       {
 checkme(); // always check for list? created or not?
 temp=start;
 printf("\n List ::=>");
 while(temp!=NULL)
    {
     printf("\t%d",temp->val);
     temp=temp->next;
    }
    return;
       }



void add()
     {
 int data;
 checkme();
 temp=start;
 printf("\n\t\t\t\t enter before which :");
 scanf("%d",&data);

 if(data==temp->val)
     {
      printf("\t\t\t\tstart val...");
      last=malloc(sizeof(struct s_list));
      printf("\n\t\t\t\t get the value...:");
      scanf("%d",&last->val);
      last->next=temp;
      start=last;
      return;
    //getch();
     }
 while(temp!=NULL)                       //go upto last node
     {
     if(temp->val==data)         //if found
         {
   printf("\n\t\t\t\t making changes...");
   extra=temp;            //point to that node
   one=temp;              // here i used two ptr "extra and one"
   break;                 //break the loop and work on the same
         }
         temp=temp->next;
         printf("\n\t\t\t\t\t not found..");
        // return;
      }

        temp=start;                    // set temp to start
        while(temp->next!=extra)       //now find upto pointed value or node
      {
       printf("%d",temp->val);
       temp=temp->next;
      }
      last=malloc(sizeof(struct s_list));
      printf("\n\t\t\t\t value : ");
      scanf("%d",&last->val);
//     printf("temp-> %d  *temp-> %d",temp,*temp);
     temp->next=last;    // join prev+new
     last->next=one;     // join prev+new+remaning
      //   return;
       }



void  del()
      {
 int data;//,cnt=0;
 checkme();
 temp=start;
 printf("\n enter number to be deleted :");
 scanf("%d",&data);

 while(temp!=NULL)                             //temp->next for next and temp for the given number
      {
    //cnt+=1;
      if(temp->next->val==data)                 //if you remove ->next next to next value is deleted
        {
  printf("\n\t\t\t\t making changes...");
  extra=temp->next;                      //take the link to be deleted
  temp->next=temp->next->next;           // join the deleted
  free(extra);                           // finally librate the link..
  break;
        }
      // printf("%d\n",cnt);
        temp=temp->next;

    //printf("\n\t\t\t\t\t not found..cnt=%d",cnt);
   // return;
    }
    return;
      }
M. Saqib: Saqib is Master-level Senior Software Engineer with over 14 years of experience in designing and developing large-scale software and web applications. He has more than eight years experience of leading software development teams. Saqib provides consultancy to develop software systems and web services for Fortune 500 companies. He has hands-on experience in C/C++ Java, JavaScript, PHP and .NET Technologies. Saqib owns and write contents on mycplus.com since 2004.
Related Post