Dsuc Assignment

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 68

ASSIGNMENT ON

DATA
STRUCTURES
USING C

NAME : SONAL DHOMNE


COURSE : B.TECH CSE
ENROLLMENT NO. : A80105221063
PROGRAM 1. WRITE A PROGRAM FOR ADDITION OF TWO MATRICES.
#include<stdio.h>

int main()

int i,j,m,n,p,q,arr1[10][10],arr2[10][10],res[10][10];

printf("Enter the order of 1st matrix: ");

scanf("%d %d",&m,&n);

printf("Enter the order of 2nd matrix: ");

scanf("%d %d",&p,&q);

if(m==p&n==q)

printf("Enter the 1st matrix:\n");

for(i=0;i<m;++i)

for(j=0;j<n;++j)

scanf("%d",&arr1[i][j]);

printf("Enter the 2st matrix:\n");

for(i=0;i<p;++i)

for(j=0;j<q;++j)

scanf("%d",&arr2[i][j]);

for(i=0;i<p;++i)

for(j=0;j<q;++j)

res[i][j]=arr1[i][j]+arr2[i][j];

printf("Resultant matrix:\n");

for(i=0;i<p;++i)

{
for(j=0;j<q;++j)

printf("%d ",res[i][j]);

printf("\n");

else

printf("Error! order of matrices does not match.");

return 0;

}
OUTPUT:
PROGRAM 2. WRITE A PROGRAM FOR SUBTRACTION OF TWO MATRICES.
#include<stdio.h>

int main()

int i,j,m,n,p,q,arr1[10][10],arr2[10][10],res[10][10];

//input order of the two matrices

printf("Enter the order of 1st matrix: ");

scanf("%d %d",&m,&n);

printf("Enter the order of 2nd matrix: ");

scanf("%d %d",&p,&q);

if(m==p&n==q)

printf("Enter the 1st matrix:\n");

for(i=0;i<m;++i)

for(j=0;j<n;++j)

scanf("%d",&arr1[i][j]);

printf("Enter the 2st matrix:\n");

for(i=0;i<p;++i)

for(j=0;j<q;++j)

scanf("%d",&arr2[i][j]);

for(i=0;i<p;++i)

for(j=0;j<q;++j)

res[i][j]=arr1[i][j]-arr2[i][j];

printf("Resultant matrix:\n");

for(i=0;i<p;++i)

{
for(j=0;j<q;++j)

printf("%d ",res[i][j]);

printf("\n");

else

printf("Error! order of matrices does not match.");

return 0;

}
OUTPUT:
PROGRAM 3. WRITE A PROGRAM FOR MULTIPLICATION OF TWO MATRICES.
#include<stdio.h>

int main()

int i,j,k,m,n,p,q,arr1[10][10],arr2[10][10],res[10][10];

//input order of the two matrices

printf("Enter the order of 1st matrix: ");

scanf("%d %d",&m,&n);

printf("Enter the order of 2nd matrix: ");

scanf("%d %d",&p,&q);

if(n==p)

printf("Enter the 1st matrix:\n");

for(i=0;i<m;++i)

for(j=0;j<n;++j)

scanf("%d",&arr1[i][j]);

printf("Enter the 2st matrix:\n");

for(i=0;i<p;++i)

for(j=0;j<q;++j)

scanf("%d",&arr2[i][j]);

for(i=0;i<p;++i)

for(j=0;j<q;++j)

res[i][j]=0;

for(k=0;k<q;k++)

res[i][j]+=arr1[i][k] * arr2[k][j];
}

printf("Resultant matrix:\n");

for(i=0;i<p;++i)

for(j=0;j<q;++j)

printf("%d ",res[i][j]);

printf("\n");

else

printf("Error! order of matrices does not match.");

return 0;

}
OUTPUT:
PROGRAM 4. WRITE A PROGRAM TO SUM DIAGONAL OF A MATRIX.
#include<stdio.h>

int main()

int i,j,m,arr[10][10],sum=0;

printf("Enter the order of the matrix: ");

scanf("%d",&m);

printf("Enter the matrix:\n");

for(i=0;i<m;++i)

for(j=0;j<m;++j)

scanf("%d",&arr[i][j]);

for(i=0;i<m;++i)

sum+=arr[i][i];

printf("Sum of diagonal of matrix:%d",sum);

return 0;

}
OUTPUT:
PROGRAM 5. WRITE A PROGRAM TO STACK USING ARRAY
IMPLEMENTATION.
#include <limits.h>

#include <stdio.h>

#include <stdlib.h>

struct Stack {

int top;

unsigned capacity;

int* array;

};

struct Stack* createStack(unsigned capacity)

struct Stack* stack = (struct Stack*)malloc(sizeof(struct Stack));

stack->capacity = capacity;

stack->top = -1;

stack->array = (int*)malloc(stack->capacity * sizeof(int));

return stack;

// Stack is full when top is equal to the last index

int isFull(struct Stack* stack)

return stack->top == stack->capacity - 1;

// Stack is empty when top is equal to -1

int isEmpty(struct Stack* stack)

return stack->top == -1;

}
// Function to add an item to stack. It increases top by 1

void push(struct Stack* stack, int item)

if (isFull(stack))

return;

stack->array[++stack->top] = item;

printf("%d pushed to stack\n", item);

// Function to remove an item from stack. It decreases top by 1

int pop(struct Stack* stack)

if (isEmpty(stack))

return INT_MIN;

return stack->array[stack->top--];

// Function to return the top from stack without removing it

int peek(struct Stack* stack)

if (isEmpty(stack))

return INT_MIN;

return stack->array[stack->top];

// Driver program to test above functions

int main()

struct Stack* stack = createStack(100);

push(stack, 10);

push(stack, 20);

printf("%d popped from stack\n", pop(stack));

return 0;

}
OUTPUT:
PROGRAM 6. WRITE A PROGRAM TO STACK USING LINKED LIST
IMPLEMETATION.
#include <stdio.h>

#include <stdlib.h>

// Structure to create a node with data and the next pointer

struct Node {

int data;

struct Node *next;

};

struct Node* top = NULL;

// Push() operation on a stack

void push(int value) {

struct Node *newNode;

newNode = (struct Node *)malloc(sizeof(struct Node));

newNode->data = value; // assign value to the node

if (top == NULL) {

newNode->next = NULL;

} else {

newNode->next = top; // Make the node as top

top = newNode; // top always points to the newly created node

printf("Node is Inserted\n\n");

int pop() {

if (top == NULL) {

printf("\nStack Underflow\n");

} else {

struct Node *temp = top;


int temp_data = top->data;

top = top->next;

free(temp);

return temp_data;

void display() {

// Display the elements of the stack

if (top == NULL) {

printf("\nStack Underflow\n");

} else {

printf("The stack is \n");

struct Node *temp = top;

while (temp->next != NULL) {

printf("%d--->", temp->data);

temp = temp->next;

printf("%d--->NULL\n\n", temp->data);

int main() {

int choice, value;

printf("\nImplementation of Stack using Linked List\n");

while (1) {

printf("1. Push\n2. Pop\n3. Display\n4. Exit\n");

printf("\nEnter your choice : ");

scanf("%d", &choice);

switch (choice) {

case 1:
printf("\nEnter the value to insert: ");

scanf("%d", &value);

push(value);

break;

case 2:

printf("Popped element is :%d\n", pop());

break;

case 3:

display();

break;

case 4:

exit(0);

break;

default:

printf("\nWrong Choice\n");

OUTPUT:
PROGRAM 7. WRITE A PROGRAM TO QUEUE USING ARRAY
IMPLEMENTATION.
#include<stdio.h>

#define SIZE 5

//Basic value initialisation

int queue[SIZE], front = -1, rear = -1;

//Function created to handle enqueue

void enqueue(int item){

if(rear == SIZE-1){

printf("Can't enqueue as the queue is full\n");

else{

//The first element condition

if(front == -1){

front = 0;

rear = rear + 1;

queue[rear] = item;

printf("We have enqueued %d\n",item);

//Function created to handle dequeue

void dequeue(){

if(front == -1){

printf("Can't dequeue as the queue is empty\n");

else{
printf("We have dequeued : %d\n", queue[front]);

front = front + 1;

//Only happens when the last element was dequeued

if(front > rear){

front = -1;

rear = -1;

//function to print the queue

void printQueue(){

if(rear == -1)

printf("\nUnable to display as queue is empty");

else{

int i;

printf("\nThe queue after enqueue & dequeue ops looks like :");

for(i = front; i <= rear; i++)

printf("%d ",queue[i]);

int main()

//enqueue begins here

enqueue(2);

enqueue(4);

enqueue(6);

enqueue(8);
//dequeue beings here

dequeue();

dequeue();

printQueue();

return 0;

OUTPUT:
PROGRAM 8. WRITE A PROGRAM TO QUEUE USING LINKED LIST
IMPLEMENTATION.
#include<stdio.h>

#include<stdlib.h>

// Structure to create a node with data and the next pointer

struct node {

int data;

struct node * next;

};

struct node * front = NULL;

struct node * rear = NULL;

// Enqueue() operation on a queue

void enqueue(int value) {

struct node * ptr;

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

ptr -> data = value;

ptr -> next = NULL;

if ((front == NULL) && (rear == NULL)) {

front = rear = ptr;

} else {

rear -> next = ptr;

rear = ptr;

printf("Node is Inserted\n\n");

// Dequeue() operation on a queue

int dequeue() {
if (front == NULL) {

printf("\nUnderflow\n");

return -1;

} else {

struct node * temp = front;

int temp_data = front -> data;

front = front -> next;

free(temp);

return temp_data;

// Display all elements of the queue

void display() {

struct node * temp;

if ((front == NULL) && (rear == NULL)) {

printf("\nQueue is Empty\n");

} else {

printf("The queue is \n");

temp = front;

while (temp) {

printf("%d ", temp -> data);

temp = temp -> next;

printf("\n\n\n");

int main() {

int choice, value;


printf("\nImplementation of Queue using Linked List\n");

while (choice != 4) {

printf("1.Enqueue\n2.Dequeue\n3.Display\n4.Exit\n");

printf("\nEnter your choice : ");

scanf("%d", & choice);

switch (choice) {

case 1:

printf("\nEnter the value to insert: ");

scanf("%d", & value);

enqueue(value);

break;

case 2:

printf("Dequeued element is :%d\n", dequeue());

break;

case 3:

display();

break;

case 4:

exit(0);

break;

default:

printf("\nWrong Choice\n");

return 0;

}
OUTPUT:
PROGRAM 9. WRITE A PROGRAM TO CIRCULAR QUEUE USING ARRAY
IMPLEMENTATION.
#include <stdio.h>

#define capacity 6

int queue[capacity];

int front = -1, rear = -1;

// Here we check if the Circular queue is full or not

int checkFull(){

if ((front == rear + 1) || (front == 0 && rear == capacity - 1)){

return 1;

return 0;

// Here we check if the Circular queue is empty or not

int checkEmpty(){

if (front == -1)

return 1;

return 0;

// Addtion in the Circular Queue

void enqueue(int value){

if (checkFull())

printf("Overflow condition\n");

else
{

if (front == -1)

front = 0;

rear = (rear + 1) % capacity;

queue[rear] = value;

printf("%d was enqueued to circular queue\n", value);

// Removal from the Circular Queue

int dequeue() {

int variable;

if (checkEmpty()) {

printf("Underflow condition\n");

return -1;

else

variable = queue[front];

if (front == rear) {

front = rear = -1;

else {

front = (front + 1) % capacity;

printf("%d was dequeued from circular queue\n", variable);

return 1;

}
// Display the queue

void print(){

int i;

if (checkEmpty())

printf("Nothing to dequeue\n");

else

printf("\nThe queue looks like: \n");

for (i = front; i != rear; i = (i + 1) % capacity)

printf("%d ", queue[i]);

printf("%d \n\n", queue[i]);

int main() {

// Not possible as the Circular queue is empty

dequeue();

enqueue(15);

enqueue(20);

enqueue(25);

enqueue(30);

enqueue(35);

print();

dequeue();

dequeue();
print();

enqueue(40);

enqueue(45);

enqueue(50);

enqueue(55);//Overflow condition

print();

return 0;

OUTPUT:
PROGRAM 10. WRITE A PROGRAM TO SINGLY LINKED LIST.
#include<stdio.h>

#include<stdlib.h>

struct node

int data;

struct node *next;

};

struct node *head;

void beginsert ();

void lastinsert ();

void randominsert();

void begin_delete();

void last_delete();

void random_delete();

void display();

void search();

void main ()

int choice =0;

while(choice != 9)

printf("\nChoose one option from the following list ...\n");

printf("\n\nMain Menu\n");

printf("\n______________\n");

printf("\n1.Insert in begining\n2.Insert at last\n3.Insert at any random location\n4.Delete from


Beginning\n5.Delete from last\n6.Delete node after specified location\n7.Search for an element\
n8.Show\n9.Exit\n");

printf("\nEnter your choice?\n");


scanf("\n%d",&choice);

switch(choice)

case 1:

beginsert();

break;

case 2:

lastinsert();

break;

case 3:

randominsert();

break;

case 4:

begin_delete();

break;

case 5:

last_delete();

break;

case 6:

random_delete();

break;

case 7:

search();

break;

case 8:

display();

break;

case 9:

exit(0);

break;

default:
printf("Please enter valid choice..");

void beginsert()

struct node *ptr;

int item;

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

if(ptr == NULL)

printf("\nOVERFLOW");

else

printf("\nEnter value\n");

scanf("%d",&item);

ptr->data = item;

ptr->next = head;

head = ptr;

printf("\nNode inserted");

void lastinsert()

struct node *ptr,*temp;

int item;

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

if(ptr == NULL)

{
printf("\nOVERFLOW");

else

printf("\nEnter value?\n");

scanf("%d",&item);

ptr->data = item;

if(head == NULL)

ptr -> next = NULL;

head = ptr;

printf("\nNode inserted");

else

temp = head;

while (temp -> next != NULL)

temp = temp -> next;

temp->next = ptr;

ptr->next = NULL;

printf("\nNode inserted");

void randominsert()

int i,loc,item;

struct node *ptr, *temp;

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


if(ptr == NULL)

printf("\nOVERFLOW");

else

printf("\nEnter element value");

scanf("%d",&item);

ptr->data = item;

printf("\nEnter the location after which you want to insert ");

scanf("\n%d",&loc);

temp=head;

for(i=0;i<loc;i++)

temp = temp->next;

if(temp == NULL)

printf("\ncan't insert\n");

return;

ptr ->next = temp ->next;

temp ->next = ptr;

printf("\nNode inserted");

void begin_delete()

struct node *ptr;

if(head == NULL)
{

printf("\nList is empty\n");

else

ptr = head;

head = ptr->next;

free(ptr);

printf("\nNode deleted from the begining ...\n");

void last_delete()

struct node *ptr,*ptr1;

if(head == NULL)

printf("\nlist is empty");

else if(head -> next == NULL)

head = NULL;

free(head);

printf("\nOnly node of the list deleted ...\n");

else

ptr = head;

while(ptr->next != NULL)

ptr1 = ptr;
ptr = ptr ->next;

ptr1->next = NULL;

free(ptr);

printf("\nDeleted Node from the last ...\n");

void random_delete()

struct node *ptr,*ptr1;

int loc,i;

printf("\n Enter the location of the node after which you want to perform deletion \n");

scanf("%d",&loc);

ptr=head;

for(i=0;i<loc;i++)

ptr1 = ptr;

ptr = ptr->next;

if(ptr == NULL)

printf("\nCan't delete");

return;

ptr1 ->next = ptr ->next;

free(ptr);

printf("\nDeleted node %d ",loc+1);

void search()

{
struct node *ptr;

int item,i=0,flag;

ptr = head;

if(ptr == NULL)

printf("\nEmpty List\n");

else

printf("\nEnter item which you want to search?\n");

scanf("%d",&item);

while (ptr!=NULL)

if(ptr->data == item)

printf("item found at location %d ",i+1);

flag=0;

else

flag=1;

i++;

ptr = ptr -> next;

if(flag==1)

printf("Item not found\n");

}
}

void display()

struct node *ptr;

ptr = head;

if(ptr == NULL)

printf("Nothing to print");

else

printf("\nprinting values . . . . .\n");

while (ptr!=NULL)

printf("\n%d",ptr->data);

ptr = ptr -> next;

OUTPUT:
PROGRAM 11. WRITE A PROGRAM TO DOUBLY LINKED LIST.
#include <stdio.h>

#include <stdlib.h>

// Linked List Node

struct node {

int info;

struct node *prev, *next;

};

struct node* start = NULL;

// Function to traverse the linked list

void traverse()

// List is empty

if (start == NULL) {

printf("\nList is empty\n");

return;

// Else print the Data

struct node* temp;

temp = start;

while (temp != NULL) {

printf("Data = %d\n", temp->info);

temp = temp->next;

// Function to insert at the front

// of the linked list

void insertAtFront()
{

int data;

struct node* temp;

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

printf("\nEnter number to be inserted: ");

scanf("%d", &data);

temp->info = data;

temp->prev = NULL;

// Pointer of temp will be

// assigned to start

temp->next = start;

start = temp;

printf("\nNode inserted.");

// Function to insert at the end of

// the linked list

void insertAtEnd()

int data;

struct node *temp, *trav;

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

temp->prev = NULL;

temp->next = NULL;

printf("\nEnter number to be inserted: ");

scanf("%d", &data);

temp->info = data;

temp->next = NULL;

trav = start;
// If start is NULL

if (start == NULL) {

start = temp;

// Changes Links

else {

while (trav->next != NULL)

trav = trav->next;

temp->prev = trav;

trav->next = temp;

printf("\nNode inserted.");

// Function to insert at any specified

// position in the linked list

void insertAtPosition()

int data, pos, i = 1;

struct node *temp, *newnode;

newnode = malloc(sizeof(struct node));

newnode->next = NULL;

newnode->prev = NULL;

// Enter the position and data

printf("\nEnter position : ");

scanf("%d", &pos);
// If start==NULL,

if (start == NULL) {

start = newnode;

newnode->prev = NULL;

newnode->next = NULL;

// If position==1,

else if (pos == 1) {

// this is author method its correct but we can simply call insertAtfront() function for this
special case

/* newnode->next = start;

newnode->next->prev = newnode;

newnode->prev = NULL;

start = newnode; */

// now this is improved by Jay Ghughriwala on geeksforgeeks

insertAtFront();

// Change links

else {

printf("\nEnter number to be inserted: ");

scanf("%d", &data);

newnode->info = data;

temp = start;

while (i < pos - 1) {

temp = temp->next;

i++;

}
newnode->next = temp->next;

newnode->prev = temp;

temp->next = newnode;

temp->next->prev = newnode;

printf("\nNode inserted.");

// Function to delete from the front

// of the linked list

void deleteFirst()

struct node* temp;

if (start == NULL)

printf("\nList is empty\n");

else {

temp = start;

start = start->next;

if (start != NULL)

start->prev = NULL;

free(temp);

printf("\nNode deleted.");

// Function to delete from the end

// of the linked list

void deleteEnd()

struct node* temp;

if (start == NULL)
printf("\nList is empty\n");

temp = start;

while (temp->next != NULL)

temp = temp->next;

if (start->next == NULL)

start = NULL;

else {

temp->prev->next = NULL;

free(temp);

printf("\nNode deleted.");

// Function to delete from any specified

// position from the linked list

void deletePosition()

int pos, i = 1;

struct node *temp, *position;

temp = start;

// If DLL is empty

if (start == NULL)

printf("\nList is empty\n");

// Otherwise

else {

// Position to be deleted

printf("\nEnter position : ");

scanf("%d", &pos);
// If the position is the first node

if (pos == 1) {

deleteFirst(); // im,proved by Jay Ghughriwala on GeeksforGeeks

if (start != NULL) {

start->prev = NULL;

free(position);

return;

// Traverse till position

while (i < pos - 1) {

temp = temp->next;

i++;

// Change Links

position = temp->next;

if (position->next != NULL)

position->next->prev = temp;

temp->next = position->next;

// Free memory

free(position);

printf("\nNode deleted.");

// Driver Code

int main()

int choice;
while (1) {

printf("\n\n\tMain Menu\n");

printf("\n\t______________\n");

printf("\n\t1 Display\n");

printf("\t2 Insertion at"

" starting\n");

printf("\t3 Insertion at"

" end\n");

printf("\t4 Insertion at "

"any position\n");

printf("\t5 Deletion of "

"first element\n");

printf("\t6 Deletion of "

"last element\n");

printf("\t7 Deletion of "

"element at any position\n");

printf("\t8 Exit\n");

printf("\nEnter Choice :\n");

scanf("%d", &choice);

switch (choice) {

case 1:

traverse();

break;

case 2:

insertAtFront();

break;

case 3:

insertAtEnd();

break;
case 4:

insertAtPosition();

break;

case 5:

deleteFirst();

break;

case 6:

deleteEnd();

break;

case 7:

deletePosition();

break;

case 8:

exit(1);

break;

default:

printf("Incorrect Choice. Try Again \n");

continue;

return 0;

OUTPUT:
PROGRAM 12. WRITE A PROGRAM TO CIRCULAR LINKED LIST.
#include<stdio.h>

#include<stdlib.h>

struct node

int info;

struct node *link;

};

struct node *create_list(struct node *last);

void display(struct node *last);

struct node *addtoempty(struct node *last,int data);

struct node *addatbeg(struct node *last,int data);

struct node *addatend(struct node *last,int data);

struct node *addafter(struct node *last,int data,int item);

struct node *del(struct node *last,int data);

int main( )

int choice,data,item;

struct node *last=NULL;

while(1)

printf("\n\n1.Create List\n");

printf("2.Display\n");

printf("3.Add to empty list\n");

printf("4.Add at beginning\n");

printf("5.Add at end\n");

printf("6.Add after \n");


printf("7.Delete\n");

printf("8.Quit\n");

printf("\nEnter your choice : ");

scanf("%d",&choice);

switch(choice)

case 1:

last=create_list(last);

break;

case 2:

display(last);

break;

case 3:

printf("\nEnter the element to be inserted : ");

scanf("%d",&data);

last=addtoempty(last,data);

break;

case 4:

printf("\nEnter the element to be inserted : ");

scanf("%d",&data);

last=addatbeg(last,data);

break;

case 5:

printf("\nEnter the element to be inserted : ");

scanf("%d",&data);

last=addatend(last,data);

break;

case 6:

printf("\nEnter the element to be inserted : ");


scanf("%d",&data);

printf("\nEnter the element after which to insert : ");

scanf("%d",&item);

last=addafter(last,data,item);

break;

case 7:

printf("\nEnter the element to be deleted : ");

scanf("%d",&data);

last=del(last,data);

break;

case 8:

exit(1);

default:

printf("\nWrong choice\n");

}/*End of switch*/

}/*End of while*/

return 0;

}/*End of main( )*/

struct node *create_list(struct node *last)

int i,n,data;

printf("\nEnter the number of nodes : ");

scanf("%d",&n);

last=NULL;

if(n==0)

return last;

printf("Enter the element to be inserted : ");

scanf("%d",&data);
last=addtoempty(last,data);

for(i=2;i<=n;i++)

printf("Enter the element to be inserted : ");

scanf("%d",&data);

last=addatend(last,data);

return last;

}/*End of create_list()*/

struct node *addtoempty(struct node *last,int data)

struct node *tmp;

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

tmp->info=data;

last=tmp;

last->link=last;

return last;

}/*End of addtoempty( )*/

struct node *addatbeg(struct node *last,int data)

struct node *tmp;

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

tmp->info=data;

tmp->link=last->link;

last->link=tmp;

return last;

}/*End of addatbeg( )*/


struct node *addatend(struct node *last,int data)

struct node *tmp;

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

tmp->info=data;

tmp->link=last->link;

last->link=tmp;

last=tmp;

return last;

}/*End of addatend( )*/

struct node *addafter(struct node *last,int data,int item)

struct node *tmp,*p;

p=last->link;

do

if(p->info==item)

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

tmp->info=data;

tmp->link=p->link;

p->link=tmp;

if(p==last)

last=tmp;

return last;

p=p->link;

}while(p!=last->link);

printf("%d not present in the list\n",item);

return last;
}/*End of addafter()*/

struct node *del(struct node *last,int data)

struct node *tmp,*p;

if(last==NULL)

printf("List is empty\n");

return last;

/*Deletion of only node*/

if(last->link==last && last->info==data)

tmp=last;

last=NULL;

free(tmp);

return last;

/*Deletion of first node*/

if(last->link->info==data)

tmp=last->link;

last->link=tmp->link;

free(tmp);

return last;

/*Deletion in between*/

p=last->link;

while(p->link!=last)

if(p->link->info==data)
{

tmp=p->link;

p->link=tmp->link;

free(tmp);

return last;

p=p->link;

/*Deletion of last node*/

if(last->info==data)

tmp=last;

p->link=last->link;

last=p;

free(tmp);

return last;

printf("\nElement %d not found\n",data);

return last;

}/*End of del( )*/

void display(struct node *last)

struct node *p;

if(last==NULL)

printf("\nList is empty\n");

return;

p=last->link;

do
{

printf("%d ",p->info);

p=p->link;

}while(p!=last->link);

printf("\n");

}/*End of display( )*/


OUTPUT:

You might also like