Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
10
20
40
55
70
Rear
Motivation
Circular
linked lists are usually sorted Circular linked lists are useful for playing video and sound files in looping mode They are also a stepping stone to implementing graphs, an important topic in comp171
insertNode(NodePtr& Rear, int item) //add new node to ordered circular linked list
deleteNode(NodePtr& Rear, int item) //remove a node from circular linked list
print(NodePtr Rear) //print the Circular Linked List once
10
20
40
55
70
Rear
Insert Node
Insert
NotePtr New = new Node; New->data = 10; Rear = New; Rear->next = Rear; 10
New Rear
Insert
New->next = Cur;
10
New
20
Cur
40
55
70
Prev Rear
Insert
10
20
Prev
55
40
New
Cur
70
Rear
Insert
10
Cur
20
40
55
Prev Rear
70
New
void insertNode(NodePtr& Rear, int item){ NodePtr New, Cur, Prev; New = new Node; New->data = item; if(Rear == NULL){ // insert into empty list Rear = New; Rear->next = Rear; return; } Prev = Rear; Cur = Rear->next; do{ // find Prev and Cur if(item <= Cur->data) break; Prev = Cur; Cur = Cur->next; }while(Cur != Rear->next); New->next = Cur; // revise pointers Prev->next = New; if(item > Rear->data) //revise Rear pointer if adding Rear = New; }
to end
Delete
10
Rear = Cur = Prev
Delete Node
Delete
10
Cur
20
40
55
70
Rear Prev
Delete
10
20
Prev
40
Cur
55
70
Rear
Delete
10
20
40
55
Prev
70
Cur Rear
void deleteNode(NodePtr& Rear, int item){ NodePtr Cur, Prev; if(Rear == NULL){ cout << "Trying to delete empty list" << endl; return; } Prev = Rear; Cur = Rear->next; do{ // find Prev and Cur if(item <= Cur->data) break; Prev = Cur; Cur = Cur->next; }while(Cur != Rear->next); if(Cur->data != item){ // data does not exist cout << "Data Not Found" << endl; return; } if(Cur == Prev){ // delete single-node list Rear = NULL; delete Cur; return; } if(Cur == Rear) // revise Rear pointer if deleting end Rear = Prev; Prev->next = Cur->next; // revise pointers delete Cur; }
void main(){ NodePtr Rear = NULL; insertNode(Rear, insertNode(Rear, insertNode(Rear, insertNode(Rear, insertNode(Rear, print(Rear); deleteNode(Rear, deleteNode(Rear, deleteNode(Rear, print(Rear); insertNode(Rear, insertNode(Rear, print(Rear); } 3); 1); 7); 5); 8); 1); 3); 8); 1); 8);