WAP to Create Single Linked List


#include <stdlib.h>
#include <string.h>
#include<stdio.h>
#include<conio.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");
 }
}

No comments:

Post a Comment