cop 3503 fall 2012 shayan javed lecture 18

124
1/ 124 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 18 Programming Fundamentals using Java 1

Upload: ciaran-fry

Post on 02-Jan-2016

40 views

Category:

Documents


3 download

DESCRIPTION

COP 3503 FALL 2012 Shayan Javed Lecture 18. Programming Fundamentals using Java. Data Structures. So far. Looked at Arrays and ArrayLists as our data structures. So far. Looked at Arrays and ArrayLists as our data structures Very useful, but not always the best options. So far. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: COP 3503 FALL 2012 Shayan Javed Lecture  18

1/ 124

1

COP 3503 FALL 2012SHAYAN JAVED

LECTURE 18

Programming Fundamentals using Java

Page 2: COP 3503 FALL 2012 Shayan Javed Lecture  18

2/ 124

Data Structures

Page 3: COP 3503 FALL 2012 Shayan Javed Lecture  18

3/ 124

So far...

Looked at Arrays and ArrayLists as our data structures

Page 4: COP 3503 FALL 2012 Shayan Javed Lecture  18

4/ 124

So far...

Looked at Arrays and ArrayLists as our data structures

Very useful, but not always the best options

Page 5: COP 3503 FALL 2012 Shayan Javed Lecture  18

5/ 124

So far...

Looked at Arrays and ArrayLists as our data structures

Very useful, but not always the best options

Going to look at some other data structures

Page 6: COP 3503 FALL 2012 Shayan Javed Lecture  18

6/ 124

Data Structures

Stack Queue Linked List Trees Graph Hashtable etc.

Page 7: COP 3503 FALL 2012 Shayan Javed Lecture  18

7/ 124

Data Structures

Stack Queue Linked List Trees Graph Hashtable etc.

Page 8: COP 3503 FALL 2012 Shayan Javed Lecture  18

8/ 124

Stack

Last-In-First-Out (LIFO) Data Structure

Page 9: COP 3503 FALL 2012 Shayan Javed Lecture  18

9/ 124

Stack

Last-In-First-Out (LIFO) Data Structure

Basically...a stack of data.

Page 10: COP 3503 FALL 2012 Shayan Javed Lecture  18

10/ 124

Stack

Last-In-First-Out (LIFO) Data Structure

Basically...a stack of data.

Used when you want the oldest added data first.

Page 11: COP 3503 FALL 2012 Shayan Javed Lecture  18

11/ 124

Stack

Last-In-First-Out (LIFO) Data Structure

Basically...a stack of data.

Used when you want the oldest added data first.

Abstract data type (can store any kind of data).

Page 12: COP 3503 FALL 2012 Shayan Javed Lecture  18

12/ 124

Stack

Three Operations:

Page 13: COP 3503 FALL 2012 Shayan Javed Lecture  18

13/ 124

Stack

Three Operations:

push(Object): Pushes an object on top of a stack

Page 14: COP 3503 FALL 2012 Shayan Javed Lecture  18

14/ 124

Stack

Three Operations:

push(Object): Pushes an object on top of a stack

pop(): Returns the object at the top of the stack and removes it

Page 15: COP 3503 FALL 2012 Shayan Javed Lecture  18

15/ 124

Stack

Three Operations:

push(Object): Pushes an object on top of a stack

pop(): Returns the object at the top of the stack and removes it

peek(): Returns the object at the top without removing it

Page 16: COP 3503 FALL 2012 Shayan Javed Lecture  18

16/ 124

Stack

Some uses:

Page 17: COP 3503 FALL 2012 Shayan Javed Lecture  18

17/ 124

Stack

Some uses:

“Stack Frame” for method calls.

Page 18: COP 3503 FALL 2012 Shayan Javed Lecture  18

18/ 124

Stack

Some uses:

“Stack Frame” for method calls.

Used for evaluating arithmetic expressions: (prefix, postfix, infix)

Page 19: COP 3503 FALL 2012 Shayan Javed Lecture  18

19/ 124

Stack

Java provides a Stack class (java.util.Stack)

Page 20: COP 3503 FALL 2012 Shayan Javed Lecture  18

20/ 124

Stack

Java provides a Stack class (java.util.Stack)

Has all the operations

Page 21: COP 3503 FALL 2012 Shayan Javed Lecture  18

21/ 124

Stack

Java provides a Stack class (java.util.Stack)

Has all the operations

But how does it actually store the data? (What’s the “back-end”?)

Page 22: COP 3503 FALL 2012 Shayan Javed Lecture  18

22/ 124

Stack

Java provides a Stack class (java.util.Stack)

Has all the operations

But how does it actually store the data? (What’s the “back-end”?)

Uses the java.util.Vector class (similar to ArrayList)

Page 23: COP 3503 FALL 2012 Shayan Javed Lecture  18

23/ 124

Queue

A First-In-First-Out (FIFO) data structure.

Page 24: COP 3503 FALL 2012 Shayan Javed Lecture  18

24/ 124

Queue

A First-In-First-Out (FIFO) data structure.

Used when you want the oldest added data first.

Page 25: COP 3503 FALL 2012 Shayan Javed Lecture  18

25/ 124

Queue

A First-In-First-Out (FIFO) data structure.

Used when you want the oldest added data first.

Often used for scheduling (handle first in line)

Page 26: COP 3503 FALL 2012 Shayan Javed Lecture  18

26/ 124

Queue

Three Operations:

enqueue(Object): Adds an object to the queue

dequeue(): Returns the object at the front of the queue and removes it

peek(): Returns the object at the front without removing it

Page 27: COP 3503 FALL 2012 Shayan Javed Lecture  18

27/ 124

Queue

Java provides a Queue interface (java.util.Queue)

Page 28: COP 3503 FALL 2012 Shayan Javed Lecture  18

28/ 124

Queue

Java provides a Queue interface (java.util.Queue)

Has all the operations enqueue = add dequeue = poll

Page 29: COP 3503 FALL 2012 Shayan Javed Lecture  18

29/ 124

Queue

Java provides a Queue interface (java.util.Queue)

Has all the operations enqueue = add dequeue = poll

Interface implemented in classes like LinkedList

Page 30: COP 3503 FALL 2012 Shayan Javed Lecture  18

30/ 124

Queue

Java provides a Queue interface (java.util.Queue)

Has all the operations enqueue = add dequeue = poll

Interface implemented in classes like LinkedList

Queue<Integer> queue = new LinkedList<Integer>();

Page 31: COP 3503 FALL 2012 Shayan Javed Lecture  18

31/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Page 32: COP 3503 FALL 2012 Shayan Javed Lecture  18

32/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

Page 33: COP 3503 FALL 2012 Shayan Javed Lecture  18

33/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short?

Page 34: COP 3503 FALL 2012 Shayan Javed Lecture  18

34/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1)

Page 35: COP 3503 FALL 2012 Shayan Javed Lecture  18

35/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1) Adding data

Page 36: COP 3503 FALL 2012 Shayan Javed Lecture  18

36/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1) Adding data – inefficient O(n) in some cases

Page 37: COP 3503 FALL 2012 Shayan Javed Lecture  18

37/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1) Adding data – inefficient O(n) in some cases

Page 38: COP 3503 FALL 2012 Shayan Javed Lecture  18

38/ 124

Arrays and ArrayLists

Work well in a lot of cases.

Can use as “back-end” data structures

But where do they fall short? Data retrieval – excellent O(1) Adding data – inefficient O(n) in some cases Fixed size – have to shift/copy to new array

Page 39: COP 3503 FALL 2012 Shayan Javed Lecture  18

39/ 124

Arrays and ArrayLists

What if your application requires a lot of adds but not retrievals?

Page 40: COP 3503 FALL 2012 Shayan Javed Lecture  18

40/ 124

Arrays and ArrayLists

What if your application requires a lot of adds but not retrievals?

Use Linked Lists

Page 41: COP 3503 FALL 2012 Shayan Javed Lecture  18

41/ 124

Linked List

A list – a collection of linked nodes.

Page 42: COP 3503 FALL 2012 Shayan Javed Lecture  18

42/ 124

Linked List

A list – a collection of linked nodes.

Dynamic data structure – size is not fixed, and memory is not contiguous (unlike an array)

Page 43: COP 3503 FALL 2012 Shayan Javed Lecture  18

43/ 124

Linked List

A list – a collection of linked nodes.

Dynamic data structure – size is not fixed, and memory is not contiguous (unlike an array)

Insertion to the list is very fast – O(1) in most cases

Page 44: COP 3503 FALL 2012 Shayan Javed Lecture  18

44/ 124

Linked List

A list – a collection of linked nodes.

Dynamic data structure – size is not fixed, and memory is not contiguous (unlike an array)

Insertion to the list is very fast – O(1) in most cases

Indexing is slow. Random access also not possible

Page 45: COP 3503 FALL 2012 Shayan Javed Lecture  18

45/ 124

Linked List

Many variations:

Singly-Linked List (can only traverse forward) Doubly-Linked List (can traverse in reverse too) Circular Linked Lists Multi-Linked Lists etc.

Page 46: COP 3503 FALL 2012 Shayan Javed Lecture  18

46/ 124

Node

Basic structure – collection of linked nodes make a linked list.

Page 47: COP 3503 FALL 2012 Shayan Javed Lecture  18

47/ 124

Node

Basic structure – collection of linked nodes make a linked list.

Stores some data and a link to the next Node.

Page 48: COP 3503 FALL 2012 Shayan Javed Lecture  18

48/ 124

Node

Basic structure – collection of linked nodes make a linked list.

Stores some data and a link to the next Node.

int null

Page 49: COP 3503 FALL 2012 Shayan Javed Lecture  18

49/ 124

Node

Basic structure – collection of linked nodes make a linked list.

Stores some data and a link to the next Node.

int int null

Page 50: COP 3503 FALL 2012 Shayan Javed Lecture  18

50/ 124

Singly-Linked List (SLL)

Nodes connected to each other

Page 51: COP 3503 FALL 2012 Shayan Javed Lecture  18

51/ 124

Singly-Linked List (SLL)

Nodes connected to each other

int int nullint

Page 52: COP 3503 FALL 2012 Shayan Javed Lecture  18

52/ 124

Singly-Linked List (SLL)

Nodes connected to each other

SLL only stores links to two nodes:

int int nullint

Page 53: COP 3503 FALL 2012 Shayan Javed Lecture  18

53/ 124

Singly-Linked List (SLL)

Nodes connected to each other

SLL only stores links to two nodes: Head node (front)

int int nullint

head

Page 54: COP 3503 FALL 2012 Shayan Javed Lecture  18

54/ 124

Singly-Linked List (SLL)

Nodes connected to each other

SLL only stores links to two nodes: Head node (front) Tail node (end)

int int nullint

head tail

Page 55: COP 3503 FALL 2012 Shayan Javed Lecture  18

55/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list

Page 56: COP 3503 FALL 2012 Shayan Javed Lecture  18

56/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end

Page 57: COP 3503 FALL 2012 Shayan Javed Lecture  18

57/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index

Page 58: COP 3503 FALL 2012 Shayan Javed Lecture  18

58/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index remove(index): remove Object at index remove(Object): remove Object

Page 59: COP 3503 FALL 2012 Shayan Javed Lecture  18

59/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index remove(index): remove Object at index remove(Object): remove Object get(Object): return index of Object get(index): return Object at index

Page 60: COP 3503 FALL 2012 Shayan Javed Lecture  18

60/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index remove(index): remove Object at index remove(Object): remove Object get(Object): return index of Object get(index): return Object at index size(): return size of the list

Page 61: COP 3503 FALL 2012 Shayan Javed Lecture  18

61/ 124

Singly-Linked List (SLL)

Operations: LinkedList(): create an empty list append(Object): add to the end insert(Object, index): add at a certain index remove(index): remove Object at index remove(Object): remove Object get(Object): return index of Object get(index): return Object at index size(): return size of the list clear(): empty the list

Page 62: COP 3503 FALL 2012 Shayan Javed Lecture  18

62/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

Page 63: COP 3503 FALL 2012 Shayan Javed Lecture  18

63/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

head tail

null

Page 64: COP 3503 FALL 2012 Shayan Javed Lecture  18

64/ 124

Singly-Linked List (SLL)

Create an Empty SLL:

public SLL() {

head = null;

tail = null;

}

head tail

null

Page 65: COP 3503 FALL 2012 Shayan Javed Lecture  18

65/ 124

Singly-Linked List (SLL)

append(Object):

Page 66: COP 3503 FALL 2012 Shayan Javed Lecture  18

66/ 124

Singly-Linked List (SLL)

append(Object):

Create a Node with that Object

Obj null

Page 67: COP 3503 FALL 2012 Shayan Javed Lecture  18

67/ 124

Singly-Linked List (SLL)

append(Object):

Create a Node with that Object

Obj null

head tail

Page 68: COP 3503 FALL 2012 Shayan Javed Lecture  18

68/ 124

Singly-Linked List (SLL)

append(Object): append another object

Obj null

head tail

Page 69: COP 3503 FALL 2012 Shayan Javed Lecture  18

69/ 124

Singly-Linked List (SLL)

append(Object): append another object

Create a Node with that Object

Obj null

head tail

Obj null

Page 70: COP 3503 FALL 2012 Shayan Javed Lecture  18

70/ 124

Singly-Linked List (SLL)

append(Object): append another object

Create a Node with that Object Make tail point to it

Obj

head tail

Obj null

Page 71: COP 3503 FALL 2012 Shayan Javed Lecture  18

71/ 124

Singly-Linked List (SLL)

append(Object): append another object

Create a Node with that Object Make tail point to it Update tail Node

Obj

head tail

Obj null

Page 72: COP 3503 FALL 2012 Shayan Javed Lecture  18

72/ 124

Singly-Linked List (SLL)

size():

Page 73: COP 3503 FALL 2012 Shayan Javed Lecture  18

73/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

Page 74: COP 3503 FALL 2012 Shayan Javed Lecture  18

74/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 75: COP 3503 FALL 2012 Shayan Javed Lecture  18

75/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 76: COP 3503 FALL 2012 Shayan Javed Lecture  18

76/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 77: COP 3503 FALL 2012 Shayan Javed Lecture  18

77/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 78: COP 3503 FALL 2012 Shayan Javed Lecture  18

78/ 124

Singly-Linked List (SLL)

size():

Obj

head tail

Obj nullObj Obj

temp

Page 79: COP 3503 FALL 2012 Shayan Javed Lecture  18

79/ 124

Singly-Linked List (SLL)

size():

Keep incrementing until you reach “null”.

Obj

head tail

Obj nullObj Obj

temp

Page 80: COP 3503 FALL 2012 Shayan Javed Lecture  18

80/ 124

Singly-Linked List (SLL)

get(Object): Returns index of first Node with that object

Page 81: COP 3503 FALL 2012 Shayan Javed Lecture  18

81/ 124

Singly-Linked List (SLL)

get(Object): Returns index of first Node with that object

You should know how to traverse

Page 82: COP 3503 FALL 2012 Shayan Javed Lecture  18

82/ 124

Singly-Linked List (SLL)

get(Object): Returns index of first Node with that object

You should know how to traverse

Compare object with equals() method

Page 83: COP 3503 FALL 2012 Shayan Javed Lecture  18

83/ 124

Singly-Linked List (SLL)

get(Object): Returns index of first Node with that object

You should know how to traverse

Compare object with equals() method Return index if found -1 if not found

Page 84: COP 3503 FALL 2012 Shayan Javed Lecture  18

84/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 85: COP 3503 FALL 2012 Shayan Javed Lecture  18

85/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 86: COP 3503 FALL 2012 Shayan Javed Lecture  18

86/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj Obj

Page 87: COP 3503 FALL 2012 Shayan Javed Lecture  18

87/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj

Obj

Page 88: COP 3503 FALL 2012 Shayan Javed Lecture  18

88/ 124

Singly-Linked List (SLL)

remove(Object):

Obj

head tail

Obj nullObj

Page 89: COP 3503 FALL 2012 Shayan Javed Lecture  18

89/ 124

Singly-Linked List (SLL)

remove(Object):

remove(index) - remove at a certain index remove(Node) - remove a certain Node

Work the same way

Obj

head tail

Obj nullObj

Page 90: COP 3503 FALL 2012 Shayan Javed Lecture  18

90/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert

Page 91: COP 3503 FALL 2012 Shayan Javed Lecture  18

91/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert find the size

Page 92: COP 3503 FALL 2012 Shayan Javed Lecture  18

92/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert find the size find the index of a specific element

Page 93: COP 3503 FALL 2012 Shayan Javed Lecture  18

93/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert find the size find the index of a specific element remove an object/Node

Page 94: COP 3503 FALL 2012 Shayan Javed Lecture  18

94/ 124

Singly-Linked List (SLL)

So now we know how to: append, prepend, insert find the size find the index of a specific element remove an object/Node

What about sorting?

Page 95: COP 3503 FALL 2012 Shayan Javed Lecture  18

95/ 124

Singly-Linked List (SLL)

Sorting:

Bubble Sort Selection Sort Insertion Sort

Page 96: COP 3503 FALL 2012 Shayan Javed Lecture  18

96/ 124

Singly-Linked List (SLL)

Sorting:

Bubble Sort Selection Sort Insertion Sort

How many of these can you implement for Linked Lists?

Page 97: COP 3503 FALL 2012 Shayan Javed Lecture  18

97/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Page 98: COP 3503 FALL 2012 Shayan Javed Lecture  18

98/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObj Obj

Page 99: COP 3503 FALL 2012 Shayan Javed Lecture  18

99/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObj Obj

Page 100: COP 3503 FALL 2012 Shayan Javed Lecture  18

100/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 101: COP 3503 FALL 2012 Shayan Javed Lecture  18

101/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 102: COP 3503 FALL 2012 Shayan Javed Lecture  18

102/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj null

Obj

Obj

Page 103: COP 3503 FALL 2012 Shayan Javed Lecture  18

103/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

Obj

head tail

Obj nullObjObj

Page 104: COP 3503 FALL 2012 Shayan Javed Lecture  18

104/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

How many nodes were changed?

Obj

head tail

Obj nullObjObj

Page 105: COP 3503 FALL 2012 Shayan Javed Lecture  18

105/ 124

Singly-Linked List (SLL)

Sorting: We should swap nodes

How many nodes were changed? 3

Obj

head tail

Obj nullObjObj

Page 106: COP 3503 FALL 2012 Shayan Javed Lecture  18

106/ 124

Singly-Linked List (SLL)

Swap:

Obj

head tail

Obj nullObj Obj Obj

Page 107: COP 3503 FALL 2012 Shayan Javed Lecture  18

107/ 124

Singly-Linked List (SLL)

Swap:

Obj

head tail

Obj nullObj Obj Obj

Page 108: COP 3503 FALL 2012 Shayan Javed Lecture  18

108/ 124

Singly-Linked List (SLL)

Swap:

Also have to modify the ones before them

Obj

head tail

Obj nullObj Obj Obj

Page 109: COP 3503 FALL 2012 Shayan Javed Lecture  18

109/ 124

Singly-Linked List (SLL)

Swap:

Also have to modify the ones before them

Obj

head tail

Obj nullObj Obj Obj

node1 node2

Page 110: COP 3503 FALL 2012 Shayan Javed Lecture  18

110/ 124

Singly-Linked List (SLL)

Swap:

Also have to modify the ones before them

Obj

head tail

Obj nullObj Obj Obj

node1 node2

node1P node2P

Page 111: COP 3503 FALL 2012 Shayan Javed Lecture  18

111/ 124

Singly-Linked List (SLL)

Swap: RESULT:

Also have to modify the ones before them We have now seen two cases

Obj

head tail

Obj nullObj Obj Obj

node2 node1

node1P node2P

Page 112: COP 3503 FALL 2012 Shayan Javed Lecture  18

112/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 113: COP 3503 FALL 2012 Shayan Javed Lecture  18

113/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 114: COP 3503 FALL 2012 Shayan Javed Lecture  18

114/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 115: COP 3503 FALL 2012 Shayan Javed Lecture  18

115/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 116: COP 3503 FALL 2012 Shayan Javed Lecture  18

116/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 117: COP 3503 FALL 2012 Shayan Javed Lecture  18

117/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1;

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 118: COP 3503 FALL 2012 Shayan Javed Lecture  18

118/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1; // the node before node2

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 119: COP 3503 FALL 2012 Shayan Javed Lecture  18

119/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1; // the node before node2

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 120: COP 3503 FALL 2012 Shayan Javed Lecture  18

120/ 124

Singly-Linked List (SLL)void swap(Node node1, Node node2, Node node1P, Node node2P) {

if (node1.next == node2) { // side-by-side (1st case)

node1.next = node2.next;

node2.next = node1;

}

else { // 2nd case

Node temp = node1.next;

node1.next = node2.next;

node2.next = temp;

node2P.next = node1; // the node before node2

}

if (node1P != null) // why?

node1P.next = node2;

// what about the head and tail nodes?

// update them accordingly

}

Page 121: COP 3503 FALL 2012 Shayan Javed Lecture  18

121/ 124

Singly-Linked List (SLL)

Sorting: So swap is not straightforward

Page 122: COP 3503 FALL 2012 Shayan Javed Lecture  18

122/ 124

Singly-Linked List (SLL)

Sorting: So swap is not straightforward

Once you figure out swap, you can implement Bubble and Selection Sort

Page 123: COP 3503 FALL 2012 Shayan Javed Lecture  18

123/ 124

Singly-Linked List (SLL)

Sorting: So swap is not straightforward

Once you figure out swap, you can implement Bubble and Selection Sort

Try to implement the Sorting Methods for Linked Lists

Page 124: COP 3503 FALL 2012 Shayan Javed Lecture  18

124/ 124

Summary

Arrays/ArrayLists: useful data structures but not always optimal. Retrieval very quick, insertion can be slow

Stacks/Queues: Abstract data types useful for LIFO/FIFO storage. Implemented using arrays/SLLs

Linked Lists: Alternative to arrays – insertion is fast but retrieval is slow.