Write a C Program to perform following operations on Doubly Linked List ADT

4 years ago
C Programming
  1. 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:

 

More related questions

Questions Bank

View all Questions