Download presentation
Presentation is loading. Please wait.
Published byMathew Kurk Modified over 9 years ago
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.