Untitled
unknown
plain_text
4 years ago
5.5 kB
5
Indexable
#include <stdio.h> #include <stdlib.h> struct node { int info; struct node *prev, *next; }; struct node* start = NULL; // Function to traverse the linked list void traverse() { struct node* temp; if (start == NULL) { printf("\nList is empty\n"); } else { 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; temp->next = start; start = temp; } // 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; } else { while (trav->next != NULL) trav = trav->next; temp->prev = trav; trav->next = temp; } } // 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); printf("\nEnter number to be inserted: "); scanf("%d", &data); newnode->info = data; temp = start; if (start == NULL) { start = newnode; newnode->prev = NULL; newnode->next = NULL; } else if (pos == 1) { newnode->next = start; newnode->next->prev = newnode; newnode->prev = NULL; start = newnode; } else { while (i < pos - 1) { temp = temp->next; i++; } newnode->next = temp->next; newnode->prev = temp; temp->next = newnode; temp->next->prev = newnode; } } 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); } } // 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); } } // Function to delete from any specified // position from the linked list void deletePosition() { int pos, i = 1; struct node *temp, *position; temp = start; if (start == NULL) printf("\nList is empty\n"); // Otherwise else { // Position to be deleted printf("\nEnter position : "); scanf("%d", &pos); if (pos == 1) { position = start; start = start->next; if (start != NULL) { start->prev = NULL; } free(position); return; } while (i < pos - 1) { temp = temp->next; i++; } position = temp->next; if (position->next != NULL) position->next->prev = temp; temp->next = position->next; free(position); } } int main() { int choice; while (1) { printf("\n\t1 To see list\n"); printf("\t2 For insertion at" " starting\n"); printf("\t3 For insertion at" " end\n"); printf("\t4 For insertion at " "any position\n"); printf("\t5 For deletion of " "first element\n"); printf("\t6 For deletion of " "last element\n"); printf("\t7 For deletion of " "element at any position\n"); printf("\t8 To 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\n"); } } return 0; }
Editor is loading...