Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

--> Imepement a doubly linked list with the following operations: insert, delete

ID: 3830479 • Letter: #

Question

--> Imepement a doubly linked list with the following operations: insert, delete, and print

--> Based on the doubly linked list implement heaps with the following operations: insert, delete, and print

--> The programs should also use operator "==".

--> Lastly, the program should also perform a heapsort

All the above must be implemented as one project meaning there should be one header (.h) file and one main (.cpp) file.

Explanation / Answer

Here is the program that Implement a doubly linked list with the following operations: insert, delete: #include #include #include struct node { struct node *previous; int data; struct node *next; }*head, *last; void insert_begning(int value) { struct node *var,*temp; var=(struct node *)malloc(sizeof(struct node)); var->data=value; if(head==NULL) { head=var; head->previous=NULL; head->next=NULL; last=head; } else { temp=var; temp->previous=NULL; temp->next=head; head->previous=temp; head=temp; } } void insert_end(int value) { struct node *var,*temp; var=(struct node *)malloc(sizeof(struct node)); var->data=value; if(head==NULL) { head=var; head->previous=NULL; head->next=NULL; last=head; } else { last=head; while(last!=NULL) { temp=last; last=last->next; } last=var; temp->next=last; last->previous=temp; last->next=NULL; } } int insert_after(int value, int loc) { struct node *temp,*var,*temp1; var=(struct node *)malloc(sizeof(struct node)); var->data=value; if(head==NULL) { head=var; head->previous=NULL; head->next=NULL; } else { temp=head; while(temp!=NULL && temp->data!=loc) { temp=temp->next; } if(temp==NULL) { printf(" %d is not present in list ",loc); } else { temp1=temp->next; temp->next=var; var->previous=temp; var->next=temp1; temp1->previous=var; } } last=head; while(last->next!=NULL) { last=last->next; } } int delete_from_end() { struct node *temp; temp=last; if(temp->previous==NULL) { free(temp); head=NULL; last=NULL; return 0; } printf(" Data deleted from list is %d ",last->data); last=temp->previous; last->next=NULL; free(temp); return 0; } int delete_from_middle(int value) { struct node *temp,*var,*t, *temp1; temp=head; while(temp!=NULL) { if(temp->data == value) { if(temp->previous==NULL) { free(temp); head=NULL; last=NULL; return 0; } else { var->next=temp1; temp1->previous=var; free(temp); return 0; } } else { var=temp; temp=temp->next; temp1=temp->next; } } printf("data deleted from list is %d",value); } void display() { struct node *temp; temp=head; if(temp==NULL) { printf("List is Empty"); } while(temp!=NULL) { printf("-> %d ",temp->data); temp=temp->next; } } int main() { int value, i, loc; head=NULL; printf("Select the choice of operation on link list"); printf(" 1.) insert at begning 2.) insert at at 3.) insert at middle"); printf(" 4.) delete from end 5.) reverse the link list 6.) display list 7.)exit"); while(1) { printf(" enter the choice of operation you want to do "); scanf("%d",&i); switch(i) { case 1: { printf("enter the value you want to insert in node "); scanf("%d",&value); insert_begning(value); display(); break; } case 2: { printf("enter the value you want to insert in node at last "); scanf("%d",&value); insert_end(value); display(); break; } case 3: { printf("after which data you want to insert data "); scanf("%d",&loc); printf("enter the data you want to insert in list "); scanf("%d",&value); insert_after(value,loc); display(); break; } case 4: { delete_from_end(); display(); break; } case 5: { printf("enter the value you want to delete"); scanf("%d",value); delete_from_middle(value); display(); break; } case 6 : { display(); break; } case 7 : { exit(0); break; } } } printf(" %d",last->data); display(); getch(); }