Oct 11, 2011

Linked List Operations

Data structures using C,
Linked list is a data structure in which the objects are arranged in a linear order. Linked List contains group of nodes, in which each node contains two fields, one is data field and another one is the reference field which contains the address of next node. In this program we insert, delete, search, and display the linked list. Read more about C Programming Language .

/***********************************************************
* You can use all the programs on  www.c-program-example.com
* for personal and learning purposes. For permissions to use the
* programs for commercial purposes,
* contact info@c-program-example.com
* To find more C programs, do visit www.c-program-example.com
* and browse!
* 
*                                  Happy Coding
***********************************************************/
#include <stdlib.h>
#include <string.h>
typedef struct node {
 int sid;
 char sname[25];
 int ssem;
 struct node *link;
} NODE;

NODE *InsFront(NODE *, int, char *, int);
NODE *InsBack(NODE *, int, char *, int);
NODE *InsPos(NODE *, int, char *, int, int);
NODE *DelNode(NODE *, int);
NODE *SrchUpdate(NODE *, int);
void Display(NODE *);

main() {
 NODE *start = NULL; /* Main Program */
 int opn, id, sem, p, insopn;
 char name[25];
 do {
  clrscr();
  printf("\n ### Linked List Operations ### \n\n");
  printf("\n Press 1-Insertion, 2-Deletion, 3-Search, 4-Display,5-Exit\n");
  printf("\n Your option ? ");
  scanf("%d", &opn);
  switch (opn) {
  case 1:
   printf("Insertion at: Press 1->Front 2->Back 3->Pos ? ");
   scanf("%d", &insopn);
   printf("\n\nRead the Sid,Name, and Sem details ?");
   scanf("%d%s%d", &id, name, &sem);
   if (insopn == 1)
    start = InsFront(start, id, name, sem);
   else if (insopn == 2)
    start = InsBack(start, id, name, sem);
   else if (insopn == 3) {
    printf(" At What Position ? ");
    scanf("%d", &p);
    start = InsPos(start, id, name, sem, p);
   }
   break;

  case 2:
   printf(" Read the Student Id of the Node to be deleted ? ");
   scanf("%d", &id);
   start = DelNode(start, id);
   break;
  case 3:
   printf(" Read the Student Id of the Node to be Searched ? ");
   scanf("%d", &id);
   start = SrchUpdate(start, id);
   break;
  case 4:
   printf(" Linked List is \n");
   Display(start);
   break;
  case 5:
   printf("\n\n Terminating \n\n");
   break;
  default:
   printf("\n\nInvalid Option !!! Try Again !! \n\n");
   break;
  }
  printf("\n\n\n\n  Press a Key to Continue . . . ");
  getch();
 } while (opn != 5);
}

NODE *InsFront(NODE *st, int id, char *name, int sem) {
 NODE *temp;
 temp = (NODE *) malloc(sizeof(NODE));
 if (temp == NULL) {
  printf(" Out of Memory !! Overflow !!!");
  return (st);
 } else {
  temp->sid = id;
  strcpy(temp->sname, name);
  temp->ssem = sem;
  temp->link = st;
  printf(" Node has been inserted at Front Successfully !!");
  return (temp);
 }
}

NODE *InsBack(NODE *st, int id, char *name, int sem) {
 NODE *temp, *t;
 temp = (NODE *) malloc(sizeof(NODE));
 if (temp == NULL) {
  printf(" Out of Memory !! Overflow !!!");
  return (st);
 } else {
  temp->sid = id;
  strcpy(temp->sname, name);
  temp->ssem = sem;
  temp->link = NULL;
  if (st == NULL)
   return (temp);
  else {
   t = st;
   while (t->link != NULL)
    t = t->link;
   t->link = temp;
   printf(" Node has been inserted at Back Successfully !!");
   return (st);
  }
 }
}

NODE *InsPos(NODE *st, int id, char *name, int sem, int pos) {
 NODE *temp, *t, *prev;
 int cnt;
 temp = (NODE *) malloc(sizeof(NODE));
 if (temp == NULL) {
  printf(" Out of Memory !! Overflow !!!");
  return (st);
 } else {
  temp->sid = id;
  strcpy(temp->sname, name);
  temp->ssem = sem;
  temp->link = NULL;
  if (pos == 1) /* Front Insertion */
  {
   temp->link = st;
   return (temp);
  } else {
   t = st;
   cnt = 1;
   while (t != NULL && cnt != pos) {
    prev = t;
    t = t->link;
    cnt++;
   }
   if (t) /* valid Position  Insert new node*/
   {
    prev->link = temp;
    temp->link = t;
   } else
    printf(" Invalid Position !!!");
   printf(" Node has been inserted at given Position  Successfully !!");
   return (st);
  }
 }
}
NODE *DelNode(NODE *st, int id) {
 NODE *t, *prev;
 if (st == NULL) {
  printf(" Underflow!!!");
  return (st);
 } else {
  t = st;
  if (st->sid == id) /* Front Deletion */
  {
   st = st->link;
   t->link = NULL;
   free(t);
   return (st);
  } else {
   while (t != NULL && t->sid != id) {
    prev = t;
    t = t->link;
   }
   if (t) /* node to be deleted  found*/
   {
    prev->link = t->link;
    t->link = NULL;
    free(t);
   } else
    printf(" Invalid Student Id !!!");
   return (st);
  }
 }
}

NODE *SrchUpdate(NODE *st, int id) {
 NODE *t;
 if (st == NULL) {
  printf(" Empty List !!");
  return (st);
 } else {
  t = st;
  while (t != NULL && t->sid != id) {
   t = t->link;
  }
  if (t) /* node to be Updated found*/
  {
   printf(" Node with Student Id %d found inthe List !\n", id);
   printf(" Read the New Id,Name and Sem forthe Student\n");
   scanf("%d%s%d", t->sid, t->sname, t->ssem);
  } else
   printf(" Invalid Student Id !!!");
  return (st);
 }
}

void Display(NODE *st) {
 NODE *t;
 if (st == NULL)
  printf("Empty List\n");
 else {
  t = st;
  printf("Start->");
  while (t) {
   printf("[%d,%s,%d]->", t->sid, t->sname, t->ssem);
   t = t->link;
  }
  printf("Null\n");
 }
}

Read more Similar C Programs
Data Structures

Learn C Programming
You can easily select the code by double clicking on the code area above.

To get regular updates on new C programs, you can

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

Share this program with your Facebook friends now! by liking it


(you can send this program to your friend using this button)

Like to get updates right inside your feed reader? Grab our feed!