Single Linked List


/* Singly linked list*/

# include<stdio.h>

# include<conio.h>

# include<alloc.h>

# include<stdlib.h>

struct node

{

int data;

struct node *link;

};

void append(struct node **,int);

void in_begin(struct node **,int);

void del(struct node **,int);

void in_middle(struct node **,int,int);

int count(struct node *);

void next(struct node **,int);

void display(struct node *);

void main()

{

struct node *p=NULL;  /* p can be said as the head or a start ptr */

int num,loc;

char choice;

char ans;

do

{

clrscr();

printf(“PROGRAM TO IMPLEMENT SINGLY LINKED LIST “);

printf(“\n=====================================”);

printf(“\n\n1.Create \\ Appending The List”);

printf(“\n2.Insert Node At Begining”);

printf(“\n3.Insert Node In Middle”);

printf(“\n4.Deleting a  Node”);

printf(“\n5.Counting The No Of Nodes”);

printf(“\n6.Next”);

printf(“\n7.Displaying the list”);

printf(“\n8.Exit”);

oper:

gotoxy(1,15);printf(”                                          “);

gotoxy(1,11);printf(“\n\nEnter ur Choice : “);

fflush(stdin);

scanf(“%c”,&choice);

switch(choice)

{

case ‘1’:

do

{

printf(“Enter any number : “);

scanf(“%d”,&num);

append(&p,num);

printf(“Enter more (y/n) :”);

fflush(stdin);

ans=getchar();

}while(ans !=’n’);

break;

case ‘2’:

printf(“Enter The Data : “);

scanf(“%d”,&num);

in_begin(&p,num);

break;

case ‘3’:

printf(“\nEnter The Position :”);

scanf(“%d”,&loc);

printf(“\nEnter The Data : “);

scanf(“%d”,&num);

in_middle(&p,loc,num);

break;

case ‘4’:

printf(“\nEnter The Data u Want To Delete : “);

scanf(“%d”,&num);

del(&p,num);

break;

case ‘5’:

printf(“\nThe No Of Nodes Are %d”,count(p));

getch();

break;

case ‘6’:

printf(“\nEnter a number:”);

scanf(“%d”,&num);

next(&p,num);

getch();

break;

case ‘7’:

display(p);

getch();

break;

case ‘8’:

printf(“\n\nQuiting…….”);

getch();

exit(0);

break;

default:

printf(“Invalid choice.Please Enter Correct Choice”);

getch();

goto oper;

}

}while(choice !=7);

}

void next(struct node **q,int num)

{

struct node *temp=*q;

if(temp==NULL)

{

printf(“\nEmpty list.”);

return;

}

while(temp!=NULL && temp->data!=num)

temp=temp->link;

if(temp==NULL)

printf(“The given element is not in the list.”);

else

{

if(temp->link!=NULL)

printf(“The next element is %d.”,temp->link->data);

else

printf(“There is no next element.”);

}

}

void append(struct node **q,int num)

{

struct node *temp,*r;

temp = *q;

if(*q==NULL)

{

temp = (struct node *)malloc(sizeof(struct node));

temp->data=num;

temp->link=NULL;

*q=temp;

}

else

{

temp = *q;

while(temp->link !=NULL)

{

temp=temp->link;

}

r = (struct node *)malloc(sizeof(struct node));

r->data=num;

r->link=NULL;

temp->link=r;

}

}

void display(struct node *q)

{

if(q==NULL)

{

printf(“\n\nEmpty Link List.Can’t Display The Data”);

getch();

goto last;

}

while(q!=NULL)

{

printf(“\n%d”,q->data);

q=q->link;

}

last:

}

int count(struct node *q)

{

int c=0;

if(q==NULL)

{

printf(“Empty Link List.\n”);

getch();

goto last;

}

while(q!=NULL)

{

c++;

q=q->link;

}

last:

return c;

}

void in_begin(struct node **q,int num)

{

struct node *temp;

if(*q==NULL)

{

printf(“Link List Is Empty.Can’t Insert.”);

getch();

goto last;

}

else

{

temp=(struct node *)malloc(sizeof(struct node));

temp->data=num;

temp->link=*q;

*q=temp;  /* pointing to the first node */

}

last:

getch();

}

void in_middle(struct node **q,int loc,int num)

{

struct node *temp,*n;

int c=1,flag=0;

temp=*q;

if(*q==NULL)

{

printf(“\n\nLink List Is Empty.Can’t Insert.”);

getch();

goto last;

}

else

while(temp!=NULL)

{

if(c==loc)

{

n = (struct node *)malloc(sizeof(struct node));

n->data=num;

n->link=temp->link;

temp->link=n;

flag=1;

}

c++;

temp=temp->link;

}

if(flag==0)

{

printf(“\n\nNode Specified Doesn’t Exist.Cant Enter The Data”);

getch();

}

else

{

printf(“Data Inserted”);

getch();

}

last:

getch();

}

void del(struct node**q,int num)

{

if(*q==NULL)

{

printf(“\n\nEmpty Linked List.Cant Delete The Data.”);

getch();

goto last;

}

else

{

struct node *old,*temp;

int flag=0;

temp=*q;

while(temp!=NULL)

{

if(temp->data==num)

{

if(temp==*q)         /* First Node case */

*q=temp->link;  /* shifted the header node */

else

old->link=temp->link;

free(temp);

flag=1;

}

else

{

old=temp;

temp=temp->link;

}

}

if(flag==0)

printf(“\nData Not Found…”);

else

printf(“\nData Deleted…Tap a key to continue”);

getch();

}

last:

getch();

}

INPUT AND OUTPUT:

1.Create \ Appending The List

2.Insert Node At Begining

3.Insert Node In Middle

4.Deleting a  Node

5.Counting The No Of Nodes

6.Next element in the List

7.Displaying the list

8.Exit

Enter ur Choice : 1

Enter any number : 1

Enter more (y/n) :y

Enter any number : 2

Enter more (y/n) :y

Enter any number : 3

Enter more (y/n) :n

Enter ur Choice : 2

Enter The Data : 10

Data inserted.

Enter ur Choice : 3

Enter The Position :2

Enter The Data : 20

Data Inserted

Enter ur Choice : 4

Enter The Data u Want To Delete : 2

Data Deleted…Tap a key to continue

Enter ur Choice : 5

The No Of Nodes Are 4

Enter ur Choice : 6

Enter a number:20

The next element is 3.

Enter ur Choice : 7

10->1->20->3->NULL

Enter ur Choice : 8

Quiting…….

Advertisements