Write a C Program to perform following operations on Doubly Linked List ADT
- Create ii. Insert iii. Delete iv. Display
#include <stdio.h> #include <stdlib.h> #include <conio.h>
struct dlinklist
{
struct dlinklist *left; int data;
struct dlinklist *right;
};
typedef struct dlinklist NODE; NODE *start = NULL;
NODE* getnode()
{
NODE * newnode;
newnode = (node *) malloc(sizeof(node)); printf("\n Enter data: ");
scanf("%d", &newnode -> data); newnode -> left = NULL; newnode -> right = NULL; return newnode;
}
int menu()
{
int ch; clrscr();
printf("\n 1.Create");
printf("\n ");
printf("\n 2. Insert a node at beginning "); printf("\n 3. Insert a node at end");
printf("\n "); printf("\n 4. Delete a node from beginning"); printf("\n 5. Delete a node from Last");
printf("\n ");
printf("\n 6. Traverse the list from Left to Right "); printf("\n 7. Traverse the list from Right to Left "); printf("\n ");
printf("\n 8.Exit");
printf("\n\n Enter your choice: "); scanf("%d", &ch);
return ch;
}
void createlist(int n)
{
int i;
NODE *newnode, *temp;
for(i = 0; i < n; i++)
{
newnode = getnode(); if(start == NULL)
start = newnode;
else
{
temp = start; while(temp -> right) temp = temp -> right;
temp -> right = newnode; newnode -> left = temp;
}
}
}
void display_left_to_right()
{
NODE *temp; temp = start;
printf("\n The contents of List: "); if(start == NULL )
printf("\n Empty List"); else
{
while(temp != NULL)
{
printf("\t %d ", temp -> data); temp = temp -> right;
}
}
}
void display_right_to_left()
{
NODE *temp; temp = start;
printf("\n The contents of List: "); if(start == NULL)
printf("\n Empty List"); else
{
while(temp -> right != NULL) temp = temp -> right;
}
while(temp != NULL)
{
printf("\t%d", temp -> data); temp = temp -> left;
}
}
void dll_insert_beg()
{
NODE *newnode; newnode = getnode(); if(start == NULL)
start = newnode; else
{
newnode -> right = start; start -> left = newnode; start = newnode;
}
}
void dll_insert_end()
{
NODE *newnode, *temp;
newnode = getnode(); if(start == NULL)
start = newnode; else
{
temp = start;
while(temp -> right != NULL) temp = temp -> right;
temp -> right = newnode; newnode -> left = temp;
}
}
void dll_delete_beg()
{
NODE *temp;
if(start == NULL)
{
printf("\n Empty list"); getch();
return ;
}
else
{
temp = start;
start = start -> right; start -> left = NULL; free(temp);
}
}
void dll_delete_last()
{
NODE *temp; if(start == NULL)
{
printf("\n Empty list"); getch();
return ;
}
else
{
temp = start;
while(temp -> right != NULL) temp = temp -> right;
temp -> left -> right = NULL; free(temp);
temp = NULL;
}
}
void main(void)
{
int ch,n; system("sys");
while(1)
{
ch = menu(); switch( ch)
{
case 1 :
case 2 :
case 3 :
printf("\n Enter Number of nodes to create: "); scanf("%d", &n);
createlist(n);
printf("\n List created.."); break;
dll_insert_beg(); break;
dll_insert_end(); break;
}
getch();
}
}
case 4 :
case 5 :
case 6 :
case 7 :
case 8: