Tuesday 14 October 2014

Illustrate the operations of single linked list

/* Write a C program to illustrate the operations of singly linked list */
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #define MAX 30
struct EMP { int empno; char empName[MAX]; char designation[MAX]; struct EMP *next; };
/*********************************************************************/ /* Function to insert a node at the front of the linked list. */ /* front: front pointer, id: employee ID, name: employee name */ /* desg: Employee designation */ /* Returns the new front pointer. */ /*********************************************************************/
struct EMP* insert(struct EMP *front, int id, char name[], char desg[]) { struct EMP *newnode;
newnode = (struct EMP*) malloc(sizeof(struct EMP));
if (newnode == NULL) { printf("\nAllocation failed\n"); exit(2); } newnode->empno = id; strcpy(newnode->empName, name); strcpy(newnode->designation, desg); newnode->next = front; front = newnode; return(front); } /*End of insert() */
/* Function to display a node in a linked list */ void printNode(struct EMP *p) { printf("\nEmployee Details...\n"); printf("\nEmp No : %d", p->empno); printf("\nName : %s", p->empName); printf("\nDesignation : %s\n", p->designation); printf("-------------------------------------\n"); } /*End of printNode() */
/* ********************************************************/ /* Function to deleteNode a node based on employee number */ /* front: front pointer, id: Key value */ /* Returns: the modified list. */ /* ********************************************************/
struct EMP* deleteNode(struct EMP *front, int id) { struct EMP *ptr; struct EMP *bptr; /* bptr is pointing to the node behind ptr */
if (front->empno == id) { ptr = front; printf("\nNode deleted:"); printNode(front); front = front->next; free(ptr); return(front); }
for(ptr=front->next, bptr=front; ptr!=NULL; ptr=ptr->next, bptr=bptr->next) { if (ptr->empno == id) { printf("\nNode deleted:"); printNode(ptr); bptr->next = ptr->next; free(ptr); return(front); } } printf("\nEmployee Number %d not found ", id); return(front); } /*End of deleteNode() */
/*****************************************************************/ /* Function to search the nodes in a linear fashion based emp ID */ /* front: front pointer, key: key ID. */ /*****************************************************************/ void search(struct EMP *front, int key) { struct EMP *ptr;
for (ptr = front; ptr != NULL; ptr = ptr -> next) { if (ptr->empno == key) { printf("\nKey found:"); printNode(ptr); return; } } printf("\nEmployee Number %d not found ", key); } /*End of search() */
/* Function to display the linked list */ void display(struct EMP *front) { struct EMP *ptr;
for (ptr = front; ptr != NULL; ptr = ptr->next) { printNode(ptr); } } /*End of display() */
/* Function to display the menu of operations on a linked list */ void menu() { printf("---------------------------------------------\n"); printf("Press 1 to INSERT a node into the list \n"); printf("Press 2 to DELETE a node from the list \n"); printf("Press 3 to DISPLAY the list \n"); printf("Press 4 to SEARCH the list \n"); printf("Press 5 to EXIT \n"); printf("---------------------------------------------\n"); } /*End of menu() */
/* Function to select the option */ char option() { char choice;
printf("\n\n>> Enter your choice: "); switch(choice=getche()) { case '1': case '2': case '3': case '4': case '5': return(choice); default : printf("\nInvalid choice."); } return choice; } /*End of option() */
/* The main() program begins */ void main() { struct EMP *linkList; char name[21], desig[51]; char choice; int eno;
linkList = NULL;
printf("\nWelcome to demonstration of singly linked list\n");
menu(); /*Function call */
do { choice = option(); /*to choose oeration to be performed */
switch(choice) { case '1': printf("\nEnter the Employee Number : "); scanf("%d", &eno);
printf("Enter the Employee name : "); fflush(stdin); gets(name);
printf("Enter the Employee Designation : "); gets(desig);
linkList = insert(linkList, eno, name, desig); break;
case '2': printf("\n\nEnter the employee number to be deleted: "); scanf("%d", &eno);
linkList = deleteNode(linkList, eno); break;
case '3': if (linkList == NULL) { printf("\nList empty."); break; } display(linkList); break;
case '4': printf("\n\nEnter the employee number to be searched: "); scanf("%d", &eno);
search(linkList, eno); break;
case '5': break; } } while (choice != '5'); } /*End fo main()*/
/*------------------------------------------------------------------------------ Output
Welcome to demonstration of singly linked list --------------------------------------------- Press 1 to INSERT a node into the list Press 2 to DELETE a node from the list Press 3 to DISPLAY the list Press 4 to SEARCH the list Press 5 to EXIT ---------------------------------------------
>> Enter your choice: 1 Enter the Employee Number : 1234 Enter the Employee name : Keerthi Enter the Employee Designation : Engineer
>> Enter your choice: 1 Enter the Employee Number : 2345 Enter the Employee name : Srinivasan Enter the Employee Designation : Specilist
>> Enter your choice: 1 Enter the Employee Number : 4567 Enter the Employee name : Annapoorna Enter the Employee Designation : Project Manager
>> Enter your choice: 3 Employee Details...
Emp No : 4567 Name : Annapoorna Designation : Project Manager -------------------------------------
Employee Details...
Emp No : 2345 Name : Srinivasan Designation : Specilist -------------------------------------
Employee Details...
Emp No : 1234 Name : Keerthi Designation : Engineer -------------------------------------
>> Enter your choice: 2
Enter the employee number to be deleted: 2345
Node deleted: Employee Details...
Emp No : 2345 Name : Srinivasan Designation : Specilist -------------------------------------
>> Enter your choice: 3 Employee Details...
Emp No : 4567 Name : Annapoorna Designation : Project Manager -------------------------------------
Employee Details...
Emp No : 1234 Name : Keerthi Designation : Engineer -------------------------------------
>> Enter your choice: 4
Enter the employee number to be searched: 2345
Employee Number 2345 not found
>> Enter your choice: 5
------------------------------------------------------------------------------*/

No comments:

Post a Comment