Presentation is loading. Please wait.

Presentation is loading. Please wait.

Doubly Linked List. COMP104 Doubly Linked Lists / Slide 2 Doubly Linked Lists * In a Doubly Linked List each item points to both its predecessor and successor.

Similar presentations


Presentation on theme: "Doubly Linked List. COMP104 Doubly Linked Lists / Slide 2 Doubly Linked Lists * In a Doubly Linked List each item points to both its predecessor and successor."— Presentation transcript:

1 Doubly Linked List

2 COMP104 Doubly Linked Lists / Slide 2 Doubly Linked Lists * In a Doubly Linked List each item points to both its predecessor and successor prev points to the predecessor next points to the successor 1070 20 5540 Head Cur Cur->nextCur->prev

3 COMP104 Doubly Linked Lists / Slide 3 Motivation * Doubly linked lists are useful for playing video and sound files with “rewind” and “instant replay” * They are also useful for other linked data which require “rewind” and “fast forward” of the data

4 #include using namespace std; struct Node{ int data; Node* next; Node* prev; }; typedef Node* NodePtr; Doubly Linked List Definition

5 COMP104 Doubly Linked Lists / Slide 5 Doubly Linked List Operations * insertNode(NodePtr Head, int item) //add new node to ordered doubly linked list * deleteNode(NodePtr Head, int item) //remove a node from doubly linked list * searchNode(NodePtr Head, int item) * print(NodePtr Head, int item)

6 COMP104 Doubly Linked Lists / Slide 6 Deleting a Node  Delete a node Cur (not at front or rear) (Cur->prev)->next = Cur->next; (Cur->next)->prev = Cur->prev; delete Cur; 1070205540 Head Cur

7 COMP104 Doubly Linked Lists / Slide 7 Inserting a Node  Insert a node New before Cur (not at front or rear) 1070205540 Head New Cur New->next = Cur; New->prev = Cur->prev; Cur->prev = New; (New->prev)->next = New;

8 COMP104 Doubly Linked Lists / Slide 8 Doubly Linked Lists with Dummy Head Node * To simplify insertion and deletion by avoiding special cases of deletion and insertion at front and rear, a dummy head node is added at the head of the list * The last node also points to the dummy head node as its successor

9 COMP104 Doubly Linked Lists / Slide 9 Doubly Linked Lists with Dummy Head n Non-Empty List n Empty List 70205540 Head 10 Dummy Head Node Head Dummy Head Node

10 void createHead(NodePtr& Head){ Head = new Node; Head->next = Head; Head->prev = Head; }

11 COMP104 Doubly Linked Lists / Slide 11 Deleting a Node  Delete a node Cur at front 70205540 Head 10 Dummy Head Node Cur (Cur->prev)->next = Cur->next; (Cur->next)->prev = Cur->prev; delete Cur;

12 COMP104 Doubly Linked Lists / Slide 12  Delete a node Cur in the middle (Cur->prev)->next = Cur->next; (Cur->next)->prev = Cur->prev; delete Cur;// same as delete front! 70 Head 10 Dummy Head Node 205540 Cur

13 COMP104 Doubly Linked Lists / Slide 13  Delete a node Cur at rear (Cur->prev)->next = Cur->next; (Cur->next)->prev = Cur->prev; delete Cur;// same as delete front and middle! 70205540 Head 10 Dummy Head Node Cur

14 void deleteNode(NodePtr Head, int item){ NodePtr Cur; Cur = searchNode(Head, item); if(Cur != NULL){ Cur->prev->next = Cur->next; Cur->next->prev = Cur->prev; delete Cur; }

15 COMP104 Doubly Linked Lists / Slide 15 Inserting a Node  Insert a Node New after dummy node and before Cur Head Dummy Head Node Cur 20 New->next = Cur; New->prev = Cur->prev; Cur->prev = New; (New->prev)->next = New; 10 New

16 COMP104 Doubly Linked Lists / Slide 16  Insert a Node New in the middle and before Cur New->next = Cur; New->prev = Cur->prev; Cur->prev = New; (New->prev)->next = New; // same as insert front! 55 Head 10 Dummy Head Node 20 Cur 40 New

17 COMP104 Doubly Linked Lists / Slide 17  Insert a Node New at Rear (with Cur pointing to dummy head) New->next = Cur; New->prev = Cur->prev; Cur->prev = New; (New->prev)->next = New; // same as insert front! 70205540 Head 10 Dummy Head Node Cur New

18 COMP104 Doubly Linked Lists / Slide 18  Insert a Node New to Empty List (with Cur pointing to dummy head node) Head Dummy Head Node New 20 New->next = Cur; New->prev = Cur->prev; Cur->prev = New; (New->prev)->next = New; Cur

19 void insertNode(NodePtr Head, int item){ NodePtr New, Cur; New = new Node; New->data = item; Cur = Head->next; while(Cur != Head){//position Cur for insertion if(Cur->data < item) Cur = Cur->next; else break; } New->next = Cur; New->prev = Cur->prev; Cur->prev = New; (New->prev)->next = New; }

20 NodePtr searchNode(NodePtr Head, int item){ NodePtr Cur = Head->next; while(Cur != Head){ if(Cur->data == item) return Cur; if(Cur->data < item) Cur = Cur->next; else break; } return NULL; } Searching a node:

21 void print(NodePtr Head){ NodePtr Cur=Head->next; while(Cur != Head){ cout data << " "; Cur = Cur->next; } cout << endl; } Print the whole list:

22 void main(){ NodePtr Head, temp; createHead(Head); print(Head); insertNode(Head, 3); print(Head); insertNode(Head, 5); print(Head); insertNode(Head, 2); print(Head); insertNode(Head, 7); insertNode(Head, 1); insertNode(Head, 8); print(Head); deleteNode(Head, 7); deleteNode(Head, 0); print(Head); temp = searchNode(Head, 5); if(temp != NULL) cout << "Data is contained in the list" << endl; else cout << "Data is NOT contained in the list" << endl; } Result is: 3 3 5 2 3 5 1 2 3 5 7 8 1 2 3 5 8 Data is contained in the list


Download ppt "Doubly Linked List. COMP104 Doubly Linked Lists / Slide 2 Doubly Linked Lists * In a Doubly Linked List each item points to both its predecessor and successor."

Similar presentations


Ads by Google