lecture no.03 data structures file19-sep-18 2 linked list operations add(9): create a new node in...

45
19-Sep-18 1 Lecture No.03 Data Structures Linked List Actual picture in memory: 1051 1052 1055 1059 1060 1061 1062 1063 1064 1056 1057 1058 1053 1054 2 6 8 7 1 1051 1063 1057 1060 0 head 1054 1063 current 2 6 8 7 1 head current 1065

Upload: truonganh

Post on 14-Aug-2019

231 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

1

Lecture No.03

Data Structures

Linked List

Actual picture in memory:

1051

1052

1055

1059

1060

1061

1062

1063

1064

1056

1057

1058

1053

1054 2

6

8

7

1

1051

1063

1057

1060

0

head 1054

1063current

2 6 8 7 1

head

current

1065

Page 2: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

2

Linked List Operations

add(9): Create a new node in memory to hold ‘9’

Node* newNode = new Node(9);9newNod

e

Linked List Operations

add(9): Create a new node in memory to hold ‘9’

Node* newNode = new Node(9);

Link the new node into the list

9newNode

2 6 8 7 1

head

current

size=5 6

9

newNode

1

3

2

Page 3: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

3

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

Page 4: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

4

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

Page 5: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

5

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

Page 6: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

6

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

Page 7: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

7

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

C++ Code for Linked List

The Node class

class Node {public:

int get() { return object; };

void set(int object) { this->object = object; };

Node *getNext() { return nextNode; };

void setNext(Node *nextNode) { this->nextNode = nextNode; };

private:

int object;Node *nextNode;

};

Page 8: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

8

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

Page 9: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

9

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

Page 10: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

10

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

Page 11: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

11

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

Page 12: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

12

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

C++ Code for Linked List

#include <stdlib.h>

#include "Node.cpp"

class List {

public:

// ConstructorList() {

headNode = new Node();

headNode->setNext(NULL);currentNode = NULL;

size = 0;

};

Page 13: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

13

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

Page 14: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

14

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

Page 15: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

15

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

Page 16: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

16

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

Page 17: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

17

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

Page 18: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

18

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

Page 19: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

19

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

Page 20: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

20

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

C++ Code for Linked List

void add(int addObject) {

Node* newNode = new Node();

newNode->set(addObject);if( currentNode != NULL ){

newNode->setNext(currentNode->getNext());

currentNode->setNext( newNode );lastCurrentNode = currentNode;

currentNode = newNode;

}else {

newNode->setNext(NULL);

headNode->setNext(newNode);lastCurrentNode = headNode;

currentNode = newNode;

}size++;

};

Page 21: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

21

Building a Linked List

headNode size=0List list;

Building a Linked List

headNode

2headNode

currentNode

size=1

lastcurrentNode

size=0List list;

list.add(2);

Page 22: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

22

Building a Linked List

headNode

2headNode

currentNode

size=1

lastcurrentNode

2 6headNode

currentNode

size=2

lastcurrentNode

size=0List list;

list.add(2);

list.add(6);

Building a Linked List

List.add(8); list.add(7); list.add(1);

2 6 7 1headNode

currentNode

size=5

lastcurrentNode

8

Page 23: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

23

C++ Code for Linked List

int get() {

if (currentNode != NULL)

return currentNode->get();

};

C++ Code for Linked List

bool next() {

if (currentNode == NULL) return false;

lastCurrentNode = currentNode;

currentNode = currentNode->getNext();

if (currentNode == NULL || size == 0)

return false;

else

return true;

};

Page 24: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

24

Analysis of Linked List

add• we simply insert the new node after the current

node. So add is a one-step operation.

remove remove is also a one-step operation

Analysis of Linked List

add• we simply insert the new node after the current

node. So add is a one-step operation.

remove remove is also a one-step operation

find worst-case: may have to search the entire list

Page 25: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

25

Analysis of Linked List

add• we simply insert the new node after the current

node. So add is a one-step operation.

remove remove is also a one-step operation

find worst-case: may have to search the entire list

back

moving the current pointer back one node requires traversing the list from the start until the node whose next pointer points to current node.

Doubly-linked List

Moving forward in a singly-linked list is easy; moving backwards is not so easy.

Page 26: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

26

Doubly-linked List

Moving forward in a singly-linked list is easy; moving backwards is not so easy.

To move back one node, we have to start at the head of the singly-linked list and move forward until the node before the current.

Doubly-linked List

Moving forward in a singly-linked list is easy; moving backwards is not so easy.

To move back one node, we have to start at the head of the singly-linked list and move forward until the node before the current.

To avoid this we can use two pointers in a node: one to point to next node and another to point to the previous node:

element nextprev

Page 27: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

27

Doubly-Linked List Node

class Node {

public:

int get() { return object; };

void set(int object) { this->object = object; };

Node* getNext() { return nextNode; };

void setNext(Node* nextNode)

{ this->nextNode = nextNode; };

Node* getPrev() { return prevNode; };

void setPrev(Node* prevNode)

{ this->prevNode = prevNode; };

private:

int object;

Node* nextNode;

Node* prevNode;

};

Doubly-linked List

Need to be more careful when adding or removing a node.

Consider add: the order in which pointers are reorganized is important:

size=52 6 8 7 1head

current

Page 28: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

28

Doubly-linked List

1. newNode->setNext( current->getNext() );

size=52 6 8 7head

current

1

9newNode 1

Doubly-linked List

1. newNode->setNext( current->getNext() );

2. newNode->setprev( current );

size=52 6 8 7head

current

1

9newNode 1

2

Page 29: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

29

Doubly-linked List

1. newNode->setNext( current->getNext() );

2. newNode->setprev( current );

3. (current->getNext())->setPrev(newNode);

size=52 6 8 7head

current

1

9newNode 1

2 3

Doubly-linked List

1. newNode->setNext( current->getNext() );

2. newNode->setprev( current );

3. (current->getNext())->setPrev(newNode);

4. current->setNext( newNode );

size=52 6 8 7head

current

1

9newNode 1

2 34

Page 30: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

30

Doubly-linked List 1. newNode->setNext( current->getNext() );

2. newNode->setprev( current );

3. (current->getNext())->setPrev(newNode);

4. current->setNext( newNode );

5. current = newNode;

6. size++;

size=62 6 8 7head

current

1

9newNode 1

2 34

Circularly-linked lists

The next field in the last node in a singly-linked list is set to NULL.

Moving along a singly-linked list has to be done in a watchful manner.

Doubly-linked lists have two NULL pointers: prev in the first node and next in the last node.

A way around this potential hazard is to link the last node with the first node in the list to create a circularly-linked list.

Page 31: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

31

Circularly-linked lists

The next field in the last node in a singly-linked list is set to NULL.

Moving along a singly-linked list has to be done in a watchful manner.

Doubly-linked lists have two NULL pointers: prev in the first node and next in the last node.

A way around this potential hazard is to link the last node with the first node in the list to create a circularly-linked list.

Circularly-linked lists

The next field in the last node in a singly-linked list is set to NULL.

Moving along a singly-linked list has to be done in a watchful manner.

Doubly-linked lists have two NULL pointers: prev in the first node and next in the last node.

A way around this potential hazard is to link the last node with the first node in the list to create a circularly-linked list.

Page 32: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

32

Circularly-linked lists

The next field in the last node in a singly-linked list is set to NULL.

Moving along a singly-linked list has to be done in a watchful manner.

Doubly-linked lists have two NULL pointers: prev in the first node and next in the last node.

A way around this potential hazard is to link the last node with the first node in the list to create a circularly-linked list.

Cicularly Linked List

Two views of a circularly linked list:

2 6 8 7 1head

current

size=5

2

8

7

1

head

current

size=5

6

Page 33: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

33

Josephus Problem

A case where circularly linked list comes in handy is the solution of the Josephus Problem.

Josephus Problem

A case where circularly linked list comes in handy is the solution of the Josephus Problem.

Consider there are 10 persons. They would like to choose a leader.

Page 34: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

34

Josephus Problem

A case where circularly linked list comes in handy is the solution of the Josephus Problem.

Consider there are 10 persons. They would like to choose a leader.

The way they decide is that all 10 sit in a circle.

Josephus Problem

A case where circularly linked list comes in handy is the solution of the Josephus Problem.

Consider there are 10 persons. They would like to choose a leader.

The way they decide is that all 10 sit in a circle.

They start a count with person 1 and go in clockwise direction and skip 3. Person 4 reached is eliminated.

Page 35: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

35

Josephus Problem

A case where circularly linked list comes in handy is the solution of the Josephus Problem.

Consider there are 10 persons. They would like to choose a leader.

The way they decide is that all 10 sit in a circle.

They start a count with person 1 and go in clockwise direction and skip 3. Person 4 reached is eliminated.

The count starts with the fifth and the next person to go is the fourth in count.

Josephus Problem

A case where circularly linked list comes in handy is the solution of the Josephus Problem.

Consider there are 10 persons. They would like to choose a leader.

The way they decide is that all 10 sit in a circle.

They start a count with person 1 and go in clockwise direction and skip 3. Person 4 reached is eliminated.

The count starts with the fifth and the next person to go is the fourth in count.

Eventually, a single person remains.

Page 36: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

36

Josephus Problem

A case where circularly linked list comes in handy is the solution of the Josephus Problem.

Consider there are 10 persons. They would like to choose a leader.

The way they decide is that all 10 sit in a circle.

They start a count with person 1 and go in clockwise direction and skip 3. Person 4 reached is eliminated.

The count starts with the fifth and the next person to go is the fourth in count.

Eventually, a single person remains.

Josephus Problem

N=10, M=3

98

7

6

54

3

2

1

10

Page 37: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

37

Josephus Problem

N=10, M=3

98

7

6

54

3

2

1

10

eliminated

Josephus Problem

N=10, M=3

9

8

7

6

54

3

2

1

10

eliminated

Page 38: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

38

Josephus Problem

N=10, M=3

9

8

7

6

54

3

2

1

10

eliminated

Josephus Problem

N=10, M=3

9

8

7

6

54

3

2

1

10

eliminated

Page 39: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

39

Josephus Problem

N=10, M=3

9

8

7

6

54

3

2

1

10

eliminated

Josephus Problem

N=10, M=3

9

8

7

6

54

3

2

1

10

eliminated

Page 40: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

40

Josephus Problem

N=10, M=3

9

8

7

6

54

3

2

1

10

eliminated

Josephus Problem

N=10, M=3

9

8

7

6

54

3

2

1

10

eliminated

Page 41: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

41

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}

Page 42: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

42

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}

Page 43: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

43

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}

Page 44: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

44

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}

Page 45: Lecture No.03 Data Structures file19-Sep-18 2 Linked List Operations add(9): Create a new node in memory to hold ‘9’ Node* newNode = new Node(9); newNod 9 e Linked List Operations

19-Sep-18

45

Josephus Problem

#include "CList.cpp"

void main(int argc, char *argv[])

{

CList list;

int i, N=10, M=3;

for(i=1; i <= N; i++ ) list.add(i);

list.start();

while( list.length() > 1 ) {

for(i=1; i <= M; i++ ) list.next();

cout << "remove: " << list.get() << endl;

list.remove();

}

cout << "leader is: " << list.get() << endl;

}