#include< stdio.h>
typedef struct linked_list
{
int data;
struct linked_list *next;
}list;
void create(list *);
void traverse(list *);
void append(list *);
list *insert(list *);
list *delete_list(list *);
list *find(list *,int);
int count(list *);
int menu(list *);
int getdata(list *);
void main()
{
list *head;
int select;
clrscr();
head=(list *)malloc(sizeof(list));
create(head);
traverse(head);
getch();
while(1)
{
select=menu(head);
switch(select)
{ case 1: head=insert(head);
getch();
break;
case 2: head=delete_list(head);
getch();
break;
case 3: printf("\n\nnumber of elements : %d",count(head));
getch();
break;
case 4: append(head);
break;
case 5: traverse(head);
getch();
break;
case 6: exit();
default : printf("\ninvalid option... \n");getch();
}
}
}
int menu(list *start)
{
int a=0;
clrscr();
printf("Your List : \n\n");
traverse(start);
printf("\n\nMENU\n-------------\n");
printf("1. insert\n2. delete\n3. count\n4. append\n5. traverse\n6. exit\nenter an option : ");
scanf("%d",&a);
return a;
}
void create(list *start)
{
printf("Enter element (Enter -1 to stop): ");
scanf("%d",&start->data);
if(start->data==-1)
start->next=NULL;
else
{
start->next=(list *)malloc(sizeof(list));
create(start->next);
}
}
int getdata(list *start)
{
int element;
while(1)
{
printf("\n\nenter element : ");
scanf("%d",&element);
if(element==-1)
{
printf("\noperation not allowed\n");
getch();
clrscr();
printf("Your List : \n\n");
traverse(start);
}
else
return element;
}
}
list *insert(list *start)
{
int element,key;
list *temp,*f;
element=getdata(start);
printf("enter the key element : ");
scanf("%d",&key);
if(start->data==key)
{
temp=(list *)malloc(sizeof(list));
temp->data=element;
temp->next=start;
start=temp;
}
else
{
f=find(start,key);
if(f==NULL)
printf("\nkey not found\n");
else
{
temp=(list *)malloc(sizeof(list));
temp->data=element;
temp->next=f->next;
f->next=temp;
}
}
return(start);
}
list *delete_list(list *start)
{
int element;
list *temp,*f;
element=getdata(start);
if(start->data==element)
{
temp=start->next;
free(start);
start=temp;
}
else
{
f=find(start,element);
if(f==NULL)
printf("\nelement not found\n");
else
{
temp=f->next->next;
free(f->next);
f->next=temp;
}
}
return (start);
}
list *find(list *start, int key)
{
if(start->next->data==key)
return (start);
if(start->next->next==NULL)
return NULL;
else
find(start->next,key);
}
int count(list *start)
{
if(start->next!=NULL)
return (1+count(start->next));
else
return 0;
}
void traverse(list *start)
{
if(start->next!=NULL)
printf("%3d ",start->data);
else
return;
traverse(start->next);
}
void append(list *start)
{
list *temp,*f;
int element;
element=getdata(start);
f=find(start,-1);
temp=(list *)malloc(sizeof(list));
temp->data=element;
temp->next=f->next;
f->next=temp;
}
Sunday, April 1, 2012
singly linked list
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment