Write a program that uses functions to perform the following operations on single linked list.
i)Creation ii) Insertion iii)Deletion iv)Traversa
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
struct node {
int value;
struct node *next;
};
void insert();
void display();
void delete();
int count();
typedef struct node DATA_NODE;
DATA_NODE *head_node, *first_node, *temp_node = 0, *prev_node, next_node;
int data;
int main() {
int option = 0;
printf("Singly Linked List Example - All Operations\n");
while (option < 5) {
printf("\nOptions\n");
printf("1 : Insert into Linked List \n");
printf("2 : Delete from Linked List \n");
printf("3 : Display Linked List\n");
printf("4 : Count Linked List\n");
printf("Others : Exit()\n");
printf("Enter your option:");
scanf("%d", &option);
switch (option) {
case 1:
insert();
break;
case 2:
delete();
break;
case 3:
display();
break;
case 4:
count();
break;
default:
break;
}
}
return 0;
}
void insert() {
printf("\nEnter Element for Insert Linked List : \n");
scanf("%d", &data);
temp_node = (DATA_NODE *) malloc(sizeof (DATA_NODE));
temp_node->value = data;
if (first_node == 0) {
first_node = temp_node;
} else {
head_node->next = temp_node;
}
temp_node->next = 0;
head_node = temp_node;
fflush(stdin);
}
void delete() {
int countvalue, pos, i = 0;
countvalue = count();
temp_node = first_node;
printf("\nDisplay Linked List : \n");
printf("\nEnter Position for Delete Element : \n");
scanf("%d", &pos);
if (pos > 0 && pos <= countvalue) {
if (pos == 1) {
temp_node = temp_node -> next;
first_node = temp_node;
printf("\nDeleted Successfully \n\n");
} else {
while (temp_node != 0) {
if (i == (pos - 1)) {
prev_node->next = temp_node->next;
if(i == (countvalue - 1))
{
head_node = prev_node;
}
printf("\nDeleted Successfully \n\n");
break;
}
else {
i++;
prev_node = temp_node;
temp_node = temp_node -> next;
}
}
}
}
else
printf("\nInvalid Position \n\n");
}
void display() {
int count = 0;
temp_node = first_node;
printf("\nDisplay Linked List : \n");
while (temp_node != 0) {
printf("# %d # ", temp_node->value);
count++;
temp_node = temp_node -> next;
}
printf("\nNo Of Items In Linked List : %d\n", count);
}
int count() { int count = 0;
temp_node = first_node;
while (temp_node != 0) {
count++;
temp_node = temp_node -> next;
}
printf("\nNo Of Items In Linked List : %d\n", count);
return count;
}
Write a program that uses functions to perform the following operations on doubly linked list:
i) Creation ii) Insertion iii) Deletion iv) Traversal
#include <stdio.h>
#include <stdlib.h>
struct node
{
struct node *prev;
int n;
struct node *next;
}*h,*temp,*temp1,*temp2,*temp4;
void insert1();
void insert2();
void insert3();
void traversebeg();
void traverseend(int);
void sort();
void search();
void update();
void delete();
int count = 0;
void main()
{
int ch;
h = NULL;
temp = temp1 = NULL;
printf("\n 1 - Insert at beginning");
printf("\n 2 - Insert at end");
printf("\n 3 - Insert at position i");
printf("\n 4 - Delete at i");
printf("\n 5 - Display from beginning");
printf("\n 6 - Display from end");
printf("\n 7 - Search for element");
printf("\n 8 - Sort the list");
printf("\n 9 - Update an element");
printf("\n 10 - Exit");
while (1)
{
printf("\n Enter choice : "); scanf("%d", &ch);
switch (ch)
{
case 1:
insert1();
break; case 2:
insert2();
break; case 3:
insert3();
break; case 4:
delete();
break; case 5:
traversebeg();
break; case 6:
temp2 = h;
if (temp2 == NULL)
printf("\n Error : List empty to display ");
else
{
}
printf("\n Reverse order of linked list is : "); traverseend(temp2->n);
break; case 7:
search();
break; case 8:
sort();
break; case 9:
update();
break; case 10:
exit(0); default:
printf("\n Wrong choice menu");
}
}
}
/* TO create an empty node */
void create()
{
int data;
temp =(struct node *)malloc(1*sizeof(struct node)); temp->prev = NULL;
temp->next = NULL;
printf("\n Enter value to node : "); scanf("%d", &data);
temp->n = data; count++;
}
/* TO insert at beginning */
void insert1()
{
if (h == NULL)
{
create(); h = temp; temp1 = h;
}
else
{
create();
temp->next = h; h->prev = temp; h = temp;
}
}
/* To insert at end */
void insert2()
{
if (h == NULL)
{
create(); h = temp; temp1 = h;
}
else
{
create();
temp1->next = temp; temp->prev = temp1; temp1 = temp;
}
}
/* To insert at any position */
void insert3()
{
int pos, i = 2;
printf("\n Enter position to be inserted : "); scanf("%d", &pos);
temp2 = h;
if ((pos < 1) || (pos >= count + 1))
{
printf("\n Position out of range to insert"); return;
}
if ((h == NULL) && (pos != 1))
{
printf("\n Empty list cannot insert other than 1st position"); return;
}
if ((h == NULL) && (pos == 1))
{
create(); h = temp; temp1 = h; return;
}
else
{
while (i < pos)
{
temp2 = temp2->next; i++;
}
create();
temp->prev = temp2;
temp->next = temp2->next; temp2->next->prev = temp; temp2->next = temp;
}
}
/* To delete an element */
void delete()
{
int i = 1, pos;
printf("\n Enter position to be deleted : "); scanf("%d", &pos);
temp2 = h;
if ((pos < 1) || (pos >= count + 1))
{
printf("\n Error : Position out of range to delete"); return;
}
if (h == NULL)
{
printf("\n Error : Empty list no elements to delete"); return;
}
else
{
while (i < pos)
{
temp2 = temp2->next; i++;
}
if (i == 1)
{
if (temp2->next == NULL)
{
printf("Node deleted from list"); free(temp2);
temp2 = h = NULL; return;
}
}
if (temp2->next == NULL)
{
temp2->prev->next = NULL; free(temp2);
printf("Node deleted from list"); return;
}
temp2->next->prev = temp2->prev; if (i != 1)
temp2->prev->next = temp2->next; /* Might not need this statement if i == 1 check */
if (i == 1)
h = temp2->next; printf("\n Node deleted"); free(temp2);
}
count--;
}
/* Traverse from beginning */
void traversebeg()
{
temp2 = h;
if (temp2 == NULL)
{
printf("List empty to display \n"); return;
}
printf("\n Linked list elements from begining : ");
while (temp2->next != NULL)
{
printf(" %d ", temp2->n); temp2 = temp2->next;
}
printf(" %d ", temp2->n);
}
/* To traverse from end recursively */
void traverseend(int i)
{
if (temp2 != NULL)
{
i = temp2->n;
temp2 = temp2->next; traverseend(i); printf(" %d ", i);
}
}
/* To search for an element in the list */
void search()
{
int data, count = 0; temp2 = h;
if (temp2 == NULL)
{
printf("\n Error : List empty to search for data"); return;
}
printf("\n Enter value to search : "); scanf("%d", &data);
while (temp2 != NULL)
{
if (temp2->n == data)
{
printf("\n Data found in %d position",count + 1); return;
}
else
temp2 = temp2->next;
count++;
}
printf("\n Error : %d not found in list", data);
}
/* To update a node value in the list */
void update()
{
int data, data1;
printf("\n Enter node data to be updated : "); scanf("%d", &data);
printf("\n Enter new data : "); scanf("%d", &data1);
temp2 = h;
if (temp2 == NULL)
{
printf("\n Error : List empty no node to update"); return;
}
while (temp2 != NULL)
{
if (temp2->n == data)
{
temp2->n = data1; traversebeg(); return;
}
else
temp2 = temp2->next;
}
printf("\n Error : %d not found in list to update", data);
}
/* To sort the linked list */
void sort()
{
int i, j, x;
temp2 = h; temp4 = h;
if (temp2 == NULL)
{
printf("\n List empty to sort"); return;
}
for (temp2 = h; temp2 != NULL; temp2 = temp2->next)
{
for (temp4 = temp2->next; temp4 != NULL; temp4 = temp4->next)
{
if (temp2->n > temp4->n)
{
x = temp2->n;
temp2->n = temp4->n; temp4->n = x;
}
}
}
traversebeg();
}
Write a program that uses functions to perform the following operations on circular linked list:
i) Creation ii) Insertion iii) Deletion iv) Traversal
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *link;
};
struct node *head = NULL, *x, *y, *z;
void create();
void ins_at_beg();
void ins_at_pos();
void del_at_beg();
void del_at_pos();
void traverse();
void search();
void sort();
void update();
void rev_traverse(struct node *p);
void main()
{
int ch;
printf("\n 1.Creation \n 2.Insertion at beginning \n 3.Insertion at remaining");
printf("\n4.Deletion at beginning \n5.Deletion at remaining \n6.traverse");
printf("\n7.Search\n8.sort\n9.update\n10.Exit\n");
while (1)
{
printf("\n Enter your choice:");
scanf("%d", &ch);
switch(ch)
{
case 1:
create();
break;
case 2:
ins_at_beg();
break;
case 3:
ins_at_pos();
break;
case 4:
del_at_beg();
break;
case 5:
del_at_pos();
break;
case 6:
traverse();
break;
case 7:
search();
break;
case 8:
sort();
break;
case 9:
update();
break;
case 10:
rev_traverse(head);
break;
default:
exit(0);
}
}
}
/*Function to create a new circular linked list*/
void create()
{
int c;
x = (struct node*)malloc(sizeof(struct node)); printf("\n Enter the data:");
scanf("%d", &x->data); x->link = x;
head = x;
printf("\n If you wish to continue press 1 otherwise 0:"); scanf("%d", &c);
while (c != 0)
{
y = (struct node*)malloc(sizeof(struct node));
printf("\n Enter the data:"); scanf("%d", &y->data);
x->link = y;
y->link = head; x = y;
printf("\n If you wish to continue press 1 otherwise 0:"); scanf("%d", &c);
}
}
/*Function to insert an element at the begining of the list*/
void ins_at_beg()
{
x = head;
y = (struct node*)malloc(sizeof(struct node)); printf("\n Enter the data:");
scanf("%d", &y->data);
while (x->link != head)
{
x = x->link;
}
x->link = y;
y->link = head; head = y;
}
/*Function to insert an element at any position the list*/
void ins_at_pos()
{
struct node *ptr;
int c = 1, pos, count = 1;
y = (struct node*)malloc(sizeof(struct node));
if (head == NULL)
{
printf("cannot enter an element at this place");
}
printf("\n Enter the data:"); scanf("%d", &y->data);
printf("\n Enter the position to be inserted:"); scanf("%d", &pos);
x = head;
ptr = head;
while (ptr->link != head)
{
count++;
ptr = ptr->link;
}
count++;
if (pos > count)
{
printf("OUT OF BOUND");
return;
}
while (c < pos)
{
z = x;
x = x->link;
c++;
}
y->link = x;
z->link = y;
}
/*Function to delete an element at any begining of the list*/
void del_at_beg()
{
if (head == NULL)
printf("\n List is empty");
else
{
x = head; y = head;
while (x->link != head)
{
x = x->link;
}
head = y->link;
x->link = head;
free(y);
}
}
/*Function to delete an element at any position the list*/
void del_at_pos()
{
if (head == NULL)
printf("\n List is empty");
else
{
int c = 1, pos;
printf("\n Enter the position to be deleted:"); scanf("%d", &pos);
x = head;
while (c < pos)
{
y = x;
x = x->link;
c++;
}
y->link = x->link;
free(x);
}
}
/*Function to display the elements in the list*/
void traverse()
{
if (head == NULL)
printf("\n List is empty"); else
{
x = head;
while (x->link != head)
{
printf("%d->", x->data); x = x->link;
}
printf("%d", x->data);
}
}
/*Function to search an element in the list*/
void search()
{
int search_val, count = 0, flag = 0; printf("\nenter the element to search\n");
scanf("%d", &search_val);
if (head == NULL)
printf("\nList is empty nothing to search");
else
{
x = head;
while (x->link != head)
{
if (x->data == search_val)
{
printf("\nthe element is found at %d", count);
flag = 1;
break;
}
count++;
x = x->link;
}
if (x->data == search_val)
{
printf("element found at postion %d", count);
}
if (flag == 0)
{
printf("\nelement not found");
}
}
}
/*Function to sort the list in ascending order*/
void sort()
{
struct node *ptr, *nxt;
int temp;
if (head == NULL)
{
printf("empty linkedlist");
}
else
{
ptr = head;
while (ptr->link != head)
{
nxt = ptr->link;
while (nxt != head)
{
if (nxt != head)
{
if (ptr->data > nxt->data)
{
}
}
else
{
temp = ptr->data;
ptr->data = nxt->data;
nxt->data = temp;
break;
}
nxt = nxt->link;
}
ptr = ptr->link;
}
}
}
/*Function to update an element at any position the list*/
void update()
{
struct node *ptr;
int search_val;
int replace_val;
int flag = 0;
if (head == NULL)
{
printf("\n empty list");
}
else
{
printf("enter the value to be edited\n");
scanf("%d", &search_val);
fflush(stdin);
printf("enter the value to be replace\n");
scanf("%d", &replace_val);
ptr = head;
while (ptr->link != head)
{
if (ptr->data == search_val)
{
ptr->data = replace_val;
flag = 1;
break;
}
ptr = ptr->link;
}
if (ptr->data == search_val)
{
ptr->data = replace_val;
flag = 1;
}
if (flag == 1)
{
printf("\nUPdate sucessful");
}
else
{
printf("\n update not successful");
}
}
}
/*Function to display the elements of the list in reverse order*/
void rev_traverse(struct node *p)
{
int i = 0;
if (head == NULL)
{
printf("empty linked list");
}
else
{
if (p->link != head)
{
i = p->data; rev_traverse(p->link);
printf(" %d", i);
}
if (p->link == head)
{
printf(" %d", p->data);
}
}
}