Wednesday, 25 September 2019

Implement a Singly Linked List in C

Implement a Singly Linked List in C


#include <stdio.h>
#include <malloc.h>
#include <process.h>
void create();
void insert_at_beg();
void insert_at_end();
void insert_after_pos();
void del();
void search();
void display();
void displayrev(start);
void reversedlist();

struct node
{
int info;
struct node *link;
}*start=NULL;

int data,item,n1,pos,i,m;
int main()
{
int n;
setbuf(stdout, NULL);
printf("\n****Linked List*****\n");
printf("\n1.Create\n2.Insert at Beginning\n3.Insert at End\n4.Insert After Position\n5.Delete\n6.Search\n7.Display\n8.Display in Reverse\n9.Reversed List\n10.Exit\n");
while(1)
{
printf("\nEnter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)\n");
scanf("%d",&n);
switch(n)
{
case 1:
create();
break;
case 2:
insert_at_beg();
break;
case 3:
insert_at_end();
break;
case 4:
insert_after_pos();
break;
case 5:
del();
break;
case 6:
search();
break;
case 7:
display();
break;
case 8:
printf("**** Reversed Linked List ****\n");
displayrev(start);
break;
case 9:
reversedlist();
break;
case 10:
exit(0);
default:
printf("\nWrong Choice !!\n");
}
}
return 0;
}
void create()
{
struct node *q, *tmp;
printf("Enter element :\n");
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->link=NULL;
if(start==NULL)
start=tmp;
else
{       q=start;
while(q->link!=NULL)
q=q->link;
q->link=tmp;
}
}
void insert_at_beg()
{
struct node *tmp;
printf("\nEnter the element to be inserted :\n");
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->link=start;
start=tmp;
display();
}
void insert_at_end()
{
struct node *tmp,*q;
printf("\nEnter the element to be inserted :\n");
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->link=NULL;

if(start==NULL)
start=tmp;
else
{
q=start;
while(q->link!=NULL)
q=q->link;
q->link=tmp;
}
display();
}
void insert_after_pos()
{
display();
struct node *q,*tmp;
int index;
tmp=malloc(sizeof(struct node));
printf("\nEnter the element to be inserted :\n");
scanf("%d",&data);
tmp->info=data;
tmp->link=NULL;

if(start==NULL)
{
start=tmp;
}
else
{
printf("Enter index after which element to be inserted :\n");
scanf("%d",&index);
q=start;
for(i=0;i<index;i++)
{
q = q->link;
if(q==NULL)
{
printf("There are  less  elements\n");
return;
}
}
tmp->link = q->link;
q->link = tmp;
}
display();
}
void del()
{
struct node *q,*tmp;
printf("Enter the element to be deleted :\n");
scanf("%d",&data);
if(start->info==data)  //deletion of first node
{
tmp=start;
start=start->link;
free(tmp);
display();
return;
}
q=start;
while(q->link->link!=NULL)     //deletion middle node
{
if(q->link->info==data)
{
tmp=q->link;
q->link=tmp->link;
free(tmp);
display();
return;
}
q=q->link;
}
if(q->link->info==data) //deletion of last node
{
tmp=q->link;
q->link=NULL;
free(tmp);
display();
return;
}
printf("\nElement not found \n");
}
void search()
{
struct node *tmp;
int i=0;
printf("\nEnter the element to be searched :");
scanf("%d",&item);
tmp=start;

while(tmp!=NULL)
{
if(tmp->info==item)
{
printf("Element found at index: %d\n",i);
return;
}
tmp=tmp->link;
i++;
}
if(tmp->link==NULL)
printf("Element not found \n");
}
void display()
{
struct node *q;
if(start==NULL)
printf("List is empty!!\n");
else
{
printf("**** Elements in Linked List ****\n");
q=start;
while(q!=NULL)
{
printf("%d\t",q->info);
q=q->link;
}
}
}

void displayrev(struct node* start)
{
struct node *q= start;
if(q!=NULL)
{
displayrev(q->link);
printf("%d ",q->info);
}
}
void reversedlist()
{
    struct node *prevNode, *curNode;

    if(start != NULL)
    {
        prevNode = start;
        curNode = start->link;
        start = start->link;

        prevNode->link = NULL; // Make first node as last node

        while(start != NULL)
        {
        start = start->link;
            curNode->link = prevNode;
            prevNode = curNode;
            curNode = start;
        }

        start = prevNode; // Make last node as head

        printf("SUCCESSFULLY REVERSED LIST\n");
        display(start);
    }
}

Output:

****Linked List*****

1.Create
2.Insert at Beginning
3.Insert at End
4.Insert After Position
5.Delete
6.Search
7.Display
8.Display in Reverse
9.Reversed List
10.Exit

Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)
1
Enter element :
10

Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)
2

Enter the element to be inserted :
5
**** Elements in Linked List ****
5 10
Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)
3

Enter the element to be inserted :
20
**** Elements in Linked List ****
5 10 20
Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)
4
**** Elements in Linked List ****
5 10 20
Enter the element to be inserted :
15
Enter index after which element to be inserted :
1
**** Elements in Linked List ****
5 10 15 20
Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)
5
Enter the element to be deleted :
20
**** Elements in Linked List ****
5 10 15
Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)
6

Enter the element to be searched :10
Element found at index: 1

Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)
8
**** Reversed Linked List ****
15 10 5 
Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)
9
SUCCESSFULLY REVERSED LIST
**** Elements in Linked List ****
15 10 5
Enter Your Choice :(1.Create 2.Insert at Beg. 3.Insert at End 4.Insert after Pos. 5.Delete 6.Search  7.Display 8.Display in Reverse 9.Reversed List 10.Exit)

No comments:

Post a Comment

Stack and Queue as ADT in C++

Stack as ADT The functions associated with stack are: empty()  – Returns whether the stack is empty size()  – Returns the size o...