CircularDoublyLinkedList

Run Settings
LanguageC
Language Version
Run Command
#include "CircularDoublyLinkedList.h" int main(void){ int i=0; int Count=0; Node* List=NULL; Node* Current=NULL; Node* NewNode=NULL; for(i=0; i<5; i++){ NewNode=CDLL_CreateNode(i); CDLL_AppendNode(&List, NewNode); } Count=CDLL_GetNodeCount(List); for(i=0; i<Count; i++){ Current=CDLL_GetNodeAt(List, i); printf("List[%d] : %d\n", i, Current->Data); } printf("\nInserting 3000 After [2]...\n\n"); Current=CDLL_GetNodeAt(List, 2); NewNode=CDLL_CreateNode(3000); CDLL_InsertAfter(Current, NewNode); printf("\nRemoving Node at 2...\n"); Current=CDLL_GetNodeAt(List, 2); CDLL_RemoveNode(&List, Current); CDLL_DestroyNode(Current); Count=CDLL_GetNodeCount(List); for(i=0; i<Count*2; i++){ if(i==0){ Current=List; } else{ Current=Current->NextNode; } printf("List[%d] : %d\n", i, Current->Data); } printf("\nDestroying List...\n"); Count=CDLL_GetNodeCount(List); for(i=0; i<Count; i++){ Current=CDLL_GetNodeAt(List, 0); if(Current!=NULL){ CDLL_RemoveNode(&List, Current); CDLL_DestroyNode(Current); } } return 0; }
#include "CircularDoublyLinkedList.h" Node* CDLL_CreateNode(ElementType NewData){ Node* NewNode=(Node*)malloc(sizeof(Node)); NewNode->Data=NewData; NewNode->PrevNode=NULL; NewNode->NextNode=NULL; return NewNode; } void CDLL_DestroyNode(Node* Node){ free(Node); } void CDLL_AppendNode(Node** Head, Node* NewNode){ if((*Head)==NULL){ *Head=NewNode; (*Head)->NextNode=*Head; (*Head)->PrevNode=*Head; } else{ Node* Tail=(*Head)->PrevNode; Tail->NextNode->PrevNode=NewNode; Tail->NextNode=NewNode; NewNode->NextNode=(*Head); NewNode->PrevNode=Tail; } } void CDLL_InsertAfter(Node* Current, Node* NewNode){ NewNode->NextNode=Current->NextNode; NewNode->PrevNode=Current; if(Current->NextNode!=NULL){ Current->NextNode->PrevNode=NewNode; Current->NextNode=NewNode; } } void CDLL_RemoveNode(Node** Head, Node* Remove){ if(*Head==Remove){ (*Head)->PrevNode->NextNode=Remove->NextNode; (*Head)->NextNode->PrevNode=Remove->PrevNode; *Head=Remove->NextNode; Remove->PrevNode=NULL; Remove->NextNode=NULL; } else{ Remove->PrevNode->NextNode=Remove->NextNode; Remove->NextNode->PrevNode=Remove->PrevNode; Remove->PrevNode=NULL; Remove->NextNode=NULL; } } Node* CDLL_GetNodeAt(Node* Head, int Location){ Node* Current=Head; while(Current!=NULL&&(--Location)>=0){ Current=Current->NextNode; } return Current; } int CDLL_GetNodeCount(Node* Head){ unsigned int Count=0; Node* Current=Head; while(Current!=NULL){ Current=Current->NextNode; Count++; if(Current==Head){ break; } } return Count; } void PrintNode(Node* _Node){ if(_Node->PrevNode==NULL){ printf("Prev:NULL"); } else{ printf("Prev:%d", _Node->PrevNode->Data); printf("Current:%d", _Node->Data); } if(_Node->NextNode==NULL){ printf("Next:NULL\n"); } else{ printf("Next:%d\n", _Node->NextNode->Data); } }
#ifndef CIRCULAR_DOUBLY_LINKEDLIST_H #define CIRCULAR_DOUBLY_LINKEDLIST_H #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct tagNode{ ElementType Data; struct tagNode* PrevNode; struct tagNode* NextNode; }Node; Node* CDLL_CreateNode(ElementType NewData); void CDLL_DestroyNode(Node* Node); void CDLL_AppendNode(Node** Head, Node* NewNode); void CDLL_InsertAfter(Node* Current, Node* NewNode); void CDLL_InsertNewHead(Node** Head, Node* NewHead); void CDLL_RemoveNode(Node** Head, Node* Remove); Node* CDLL_GetNodeAt(Node* Head, int Location); int CDLL_GetNodeCount(Node* Head); #endif
Editor Settings
Theme
Key bindings
Full width
Lines