Implementation of Doubly Linked List
Implementation of Doubly Linked List
h> typedef struct node { int iData; struct node *next; struct node *prev; }node; node *START = NULL, *TAIL = NULL; node* getNode(int iData) { node* pNewNode = (node *)malloc(sizeof(node)); pNewNode->iData = iData; pNewNode->next = NULL; pNewNode->prev = NULL; } void addHead(int iData) { node* pNewNode = getNode(iData); pNewNode->next = START; START->prev = pNewNode; START = pNewNode; } void insertAt(int iLoc, int iData) { node* pNewNode = NULL; node* pTempNode = NULL; int iPos = 1; if (iLoc == 1) { addHead(iData); } else { for(pTempNode = START; pTempNode->next != NULL && iLoc < iPos;pTempNode = pTempNode->next, iPos++); if (iLoc == iPos) { pNewNode = getNode(iData); pNewNode->next = pTempNode->next; pNewNode->prev = pTempNode; if (pTempNode->next != NULL) { pTempNode->next->prev = pNewNode; } else // If it is the last node { TAIL = pNewNode; } pTempNode->next = pNewNode; } else { printf("\nInvalid Position"); } }
} void addTail(int iData) { node* pNewNode = NULL; node* pTempNode = NULL; pNewNode = getNode(iData); pNewNode->prev = TAIL; TAIL->next = pNewNode; TAIL = pNewNode; } void removeHead() { node* pDelNode = NULL; pDelNode = START; START = START->next; if (pDelNode == TAIL) // If it is the last element in the list { TAIL = NULL; } else { START->prev = NULL; } free(pDelNode); } void deleteAt(int iLoc) { node* pTempNode = NULL; node* pDelNode = NULL; int iPos = 1; if (iLoc == 1) { removeHead(); } else { for (pTempNode = START; iPos < iLoc && pTempNode->next != NULL;pTempNod e = pTempNode->next, iPos++); if (iLoc == iPos) { pDelNode = pTempNode->next; pTempNode->next = pDelNode->next; if (pDelNode == TAIL) { TAIL = TAIL->next; } else { pDelNode->next->prev = pTempNode; } free(pDelNode); } } } void removeTail() { struct node* pTempNode = NULL; struct node* pDelNode = NULL;
if (START == NULL) { printf("\nList is Empty\n"); } else { for (pTempNode = START; pTempNode->next != NULL;pTempNode = pTempNode-> next); pDelNode = pTempNode->next; pTempNode->next = NULL; TAIL = TAIL->next; if(TAIL == NULL) { START = NULL; } free(pDelNode); } } void display() { node* pTempNode = NULL; for(pTempNode = START; pTempNode != NULL; pTempNode = pTempNode->next) { printf("\nData = %d\n", pTempNode->iData);} } void reversedisplay() { node* pTempNode = NULL; for(pTempNode = TAIL; pTempNode != NULL; pTempNode = pTempNode->prev) { printf("Data = %d\n", pTempNode->iData); } } main() { int data,loc,ch; printf("\n----------Menu----------\n"); printf("1.Insert at beginning\t6.Delete at given position\n2.Insert at po sition\t7.Delete at last\n3.Insert at last\t8.Display\n"); printf("\t9.Reverse display\n5.Delete at first\t10.exit\n"); switch (ch) { case 1: printf("\nEnter the element to be added\n"); scanf("%d",&data); addHead(data); display(); break; case 2: printf("\nEnter the position:\n"); scanf("%d",&loc); printf("\nEnter the element to be added:\n"); scanf("%d",&data); insertAt(loc,data); display(); break; case 3:
printf("\nEnter the element to be added:\n"); scanf("%d",&data); addTail(data); display(); break; case 5: removeHead(); display(); break; case 6: printf("\nEnter the position of the element to be deleted:\n" ); scanf("%d",&loc); deleteAt(loc); break; 7: removeTail(); display(); break; 8: printf("\nThe elements in the list are:\n"); display(); break; break; 9: reversedisplay(); break; 10: exit(0); } getch(); return 0; }
case
case
case case