#include<stdio.h>
#include<conio.h>
void create_link_list(struct node *);
void display_link_list(struct node *);
void insert_first(struct node *);
void insert_last(struct node *);
void delete_node(struct node *);
void delete_node_first(struct node *);
void delete_node_last(struct node *);
void insert_node_before(struct node *);
void insert_node_after(struct node *);
void swap_value(struct node *);
void reverse_link_list(struct node *);
struct node
{
int data;
struct node *next;
};
void main()
{
struct node *head=NULL;
int ch;
// clrscr();
while(1)
{
//system("cls");
printf("\n\n Link List Operation...\n\n 1. Create \n 2. Display \n 3. Insert First \n 4. Insert Last ");
printf("\n 5. Insert Before \n 6. Insert After \n 7. Delete node fisrt \n 8. Delete node last ");
printf("\n 9. Delete node \n 10. Swap Vale \n 11. Reverse \n 0. Exit");
printf("\n\n Enter your chioice : ");
scanf("%d",&ch);
if( ch == 0 )
{
printf("\n\n Thank you...!");
getch();
exit(0);
}
else
{
switch(ch)
{
case 1 :
create_link_list(&head);
break;
case 2 :
display_link_list(head);
break;
case 3 :
insert_first(&head);
break;
case 4 :
insert_last(&head);
break;
case 5 :
insert_node_before(&head);
break;
case 6 :
insert_node_after(head);
break;
case 7 :
delete_node_first(&head);
break;
case 8 :
delete_node_last(&head);
break;
case 9 :
delete_node(&head);
break;
case 10 :
swap_value(head);
break;
case 11 :
reverse_link_list(&head);
break;
default :
printf("\n\n Invalid choice...!");
}
}
getch();
}
}
// This function is create a Link list...
void create_link_list(struct node **first)
{
struct node *new_node = *first,*pre=NULL;
int value;
printf("\n\n Enter value for Link List (-1 for terminate)...\n");
while(1)
{
printf("\n\t Enter value : ");
scanf("%d",&value);
if( value != -1)
{
new_node = (struct node *)malloc(sizeof(struct node)); // create node and assign value...
new_node->data = value;
new_node->next = NULL;
if( new_node != NULL ) // check memory space is available or not...
{
if( *first == NULL ) // check first node is empty or not...
{
*first = new_node;
pre = new_node;
}
else
{
pre->next = new_node;
pre = new_node;
}
}
else
{
printf("\n\n Not engough space...!");
break;
}
}
else
{
printf("\n\n Link List is created...!");
break;
}
}
}
// This function is display a Link list...
void display_link_list(struct node *first)
{
if( first != NULL )
{
printf("\n\n Link list is : ");
while( first != NULL )
{
printf(" %d",first->data);
first = first->next;
}
}
else
{
printf("\n\n Link List not created...!");
}
}
// This function is insert node at first...
void insert_first(struct node **first)
{
struct node *new_node;
new_node = (struct node *)malloc(sizeof(struct node));
if( new_node != NULL )
{
printf("\n\n Insert First...\n");
printf("\n\t Enter value : ");
scanf("%d",&new_node->data);
new_node->next = NULL;
if( *first == NULL )
*first = new_node;
else
{
new_node->next = *first;
*first = new_node;
}
printf("\n\n Node is Inserted at First...!");
}
else
printf("\n\n Not engough space...!");
}
// This function is insert node at last...
void insert_last(struct node **first)
{
struct node *new_node,*traverse = *first;;
new_node = (struct node *)malloc(sizeof(struct node));
if( new_node != NULL )
{
printf("\n\n Insert Last...\n");
printf("\n\t Enter value : ");
scanf("%d",&new_node->data);
new_node->next = NULL;
if( *first == NULL )
*first = new_node;
else
{
while( traverse->next != NULL )
traverse = traverse->next;
traverse->next = new_node;
}
printf("\n\n Node inserted at last...!");
}
else
printf("\n\n Not engough space...!");
}
// This function is delete node ...
void delete_node(struct node **first)
{
struct node *pre = *first,*temp=NULL;
int value;
if( *first != NULL )
{
printf("\n\n Delete Node...\n");
printf("\n\t Enter value : ");
scanf("%d",&value);
if( pre->data == value)
{
*first = pre->next;
free(pre);
}
else
{
temp = *first;
while( temp != NULL && temp->data != value)
{
pre = temp;
temp = temp->next;
}
if( temp != NULL )
{
pre->next = temp->next;
free(temp);
}
else
{
printf("\n\n Node is not found...!");
}
}
printf("\n\n Node is deleted...!");
}
else
{
printf("\n\n Link List not created...!");
}
}
// This function is delete first node ...
void delete_node_first(struct node **first)
{
struct node *pre = *first;
if( *first != NULL )
{
printf("\n\n Delete Node First...\n");
*first = pre->next;
free(pre);
printf("\n\n Node is deleted...!");
}
else
{
printf("\n\n Link List not created...!");
}
}
// This function is delete last node ...
void delete_node_last(struct node **first)
{
struct node *pre = *first,*temp=NULL;
if( *first != NULL )
{
printf("\n\n Delete Node Last...\n");
temp = *first;
while( temp->next != NULL)
{
pre = temp;
temp = temp->next;
}
if( temp != NULL )
{
if ( temp == *first )
{
free(temp);
*first = NULL;
}
else
{
pre->next = NULL;
free(temp);
}
}
printf("\n\n Node is deleted...!");
}
else
{
printf("\n\n Link List not created...!");
}
}
// This function is insert node before given node (value) ...
void insert_node_before(struct node **first)
{
struct node *new_node , *temp = *first , *pre;
int value;
if( *first != NULL )
{
new_node = (struct node *)malloc(sizeof(struct node));
if( new_node != NULL )
{
printf("\n\n Insert Node Before...\n");
printf("\n\n Entre value where you want to add : ");
scanf("%d",&value);
if( temp->data == value )
{
printf("\n\n Enter value : ");
scanf("%d",&new_node->data);
new_node->next = *first;
*first = new_node;
printf("\n\n Node Inserted at before %d...!",temp->data);
}
else
{
while( temp != NULL && temp->data != value )
{
pre = temp;
temp = temp->next;
}
if( temp != NULL )
{
printf("\n\n Enter value : ");
scanf("%d",&new_node->data);
pre->next = new_node;
new_node->next = temp;
printf("\n\n Node Inserted at before %d...!",temp->data);
}
else
{
printf("\n\n Node not found...!");
free(new_node);
}
}
}
else
printf("\n\n Not engough space...!");
}
else
{
printf("\n\n Link List not created...!");
}
}
// This function is insert node after given node (value) ...
void insert_node_after(struct node *first)
{
struct node *new_node , *temp = first ;
int value;
if( first != NULL )
{
new_node = (struct node *)malloc(sizeof(struct node));
if( new_node != NULL )
{
printf("\n\n Insert Node After...\n");
printf("\n\n Entre value where you want to add : ");
scanf("%d",&value);
while( temp != NULL && temp->data != value )
{
temp = temp->next;
}
if( temp != NULL )
{
printf("\n\n Enter value : ");
scanf("%d",&new_node->data);
new_node->next = temp->next;
temp->next = new_node;
printf("\n\n Node Inserted at after %d...!",temp->data);
}
else
{
printf("\n\n Node not found...!");
free(new_node);
}
}
else
printf("\n\n Not engough space...!");
}
else
{
printf("\n\n Link List not created...!");
}
}
// This function is swap the value of two given value...
void swap_value(struct node *first)
{
struct node *node1,*node2;
int temp;
if( first != NULL )
{
printf("\n\n Swap Value...\n");
printf("\n\n Enter first value : ");
scanf("%d",&temp);
node1 = first;
while( node1 != NULL && node1->data != temp)
node1 = node1->next;
if( node1 == NULL )
printf("\n\n Node not found...!");
else
{
printf("\n\n Enter second value : ");
scanf("%d",&temp);
node2 = first;
while( node2 != NULL && node2->data != temp)
node2 = node2->next;
if( node2 == NULL )
printf("\n\n Node not found...!");
else
{
temp = node1->data;
node1->data = node2->data;
node2->data = temp;
printf("\n\n Value of Node is swaped...!");
}
}
}
else
{
printf("\n\n Link List not created...!");
}
}
// This function is reverse the whole link list...
void reverse_link_list(struct node **first)
{
struct node *current,*pre,*next;
if( *first != NULL )
{
current = *first;
pre = next = NULL;
while( current != NULL )
{
next = current->next;
current->next = pre;
pre = current;
current = next ;
}
*first = pre;
printf("\n\n Link List is Reversed...!");
}
else
{
printf("\n\n Link List not created...!");
}
}
/******************************************************
Output :
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 1
Enter value for Link List (-1 for terminate)...
Enter value : 10
Enter value : 20
Enter value : 30
Enter value : -1
Link List is created...!
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 2
Link list is : 10 20 30
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 3
Insert First...
Enter value : 25
Node is Inserted at First...!
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 3
Insert First...
Enter value : 21
Node is Inserted at First...!
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 2
Link list is : 21 25 10 20 30
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 8
Delete Node Last...
Node is deleted...!
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 2
Link list is : 21 25 10 20
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 11
Link List is Reversed...!
Link List Operation...
1. Create
2. Display
3. Insert First
4. Insert Last
5. Insert Before
6. Insert After
7. Delete node fisrt
8. Delete node last
9. Delete node
10. Swap Vale
11. Reverse
0. Exit
Enter your chioice : 2
Link list is : 20 10 25 21
*******************************************************/
- Blogger Comment
- Facebook Comment
Subscribe to:
Post Comments
(
Atom
)
0 comments:
Post a Comment